ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

PythonÏß³ÌÓë½ø³ÌÊÖ¼Ç

¸üÐÂʱ¼ä:2018Äê09ÔÂ21ÈÕ17ʱ23·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

#Ïß³ÌÓ¦ÓõĵÚÒ»ÖÖ·½Ê½£ºthreadÄ£¿éÊDZȽϵײãµÄÄ£¿é
#import thread£ºÒýÓõÄÄ£¿é
#thread.start_new_thread(defName,())£ºÏ̵߳Ĵ´½¨
#thread.exit_thread()£ºÏ̵߳ĽáÊø

#Ïß³ÌÓ¦ÓõĵڶþÖÖ·½Ê½£ºthreadingÄ£¿éÊǶÔthread×öÁËһЩ°ü×°£¬¿ÉÒÔ¸ü·½±ã±»ÒýÓÃ
#import threading£ºÒýÓõÄÄ£¿é
#myThread=threading.Thread(target=defName,args=('Alice',))£ºÏ̵߳Ĵ´½¨
#myThread.start()£ºÏ߳̿ªÊ¼Ö´ÐÐ
#num=len(threading.enumerate)£ºÏß³ÌÊýÁ¿µÄ²é¿´
#Ïß³ÌÓ¦ÓõĵÚÈýÖÖ·½Ê½£º´´½¨Ò»¸öÏß³ÌÀ࣬¼Ì³Ð»ùÀࣺthreading.Thread ¡£ÖØÐ´def run(self):·½·¨¡£ÐèÒªÔËÐеÄÄÚÈÝ£¬Ð´ÔÚrun·½·¨ÀïÃæ¡£
#class MyThread(threading.Thread)£º´´½¨ÀàµÄ¶ÔÏó
#¿ÉÒÔ½øÐÐÖØ¹¹º¯ÊýµÄ¶ÔÓ¦À©Õ¹£ºdef __init__(self,name,time):threading.Thread.__init__(self,name='¶ÔÓ¦µÄÏß³ÌÃû×Ö')
#myThread=MyThread()£º´´½¨¶ÔÏó
#myThread.start()£ºÏ߳̿ªÊ¼Ö´ÐÐ
------------------------------Ïß³Ìͬ²½Ö®»¥³âËø---------------------------
#Ïß³Ìͬ²½Ö®»¥³âËø
#»¥³âËøÍ¬²½£ºÏß³Ìͬ²½Äܹ»±£Ö¤¶à¸öḬ̈߳²È«·ÃÎʾºÕù×ÊÔ´£¬×î¼òµ¥µÄͬ²½»úÖÆÊÇÒýÓû¥³âËø¡£»¥³âËøÎª×ÊÔ´ÒýÈëÒ»¸ö״̬£ºËø¶¨/·ÇËø¶¨¡£Ä³¸öÏß³ÌÒª¸ü¸Ä¹²ÏíÊý¾Ýʱ£¬ÏȽ«ÆäËø¶¨£¬´Ëʱ×ÊÔ´µÄ״̬Ϊ“Ëø¶¨”£¬ÆäËûÏ̲߳»Äܸü¸Ä£»Ö±µ½¸ÃÏß³ÌÊÍ·Å×ÊÔ´£¬½«×ÊÔ´µÄ״̬±ä³É“·ÇËø¶¨”£¬ÆäËûµÄÏ̲߳ÅÄÜÔÙ´ÎËø¶¨¸Ã×ÊÔ´¡£
#mutex=threading.Lock()£º´´½¨»¥³âËø
#if mutex.acquire([blocking])£º»¥³âËøËø¶¨×´Ì¬£¬·µ»ØÖµ²»Îª0±íʾÉÏËø³É¹¦
#        Ëø¶¨·½·¨acquire¿ÉÒÔÓÐÒ»¸öblocking²ÎÊý¡£Èç¹ûÉ趨blockingΪTrue£¬Ôòµ±Ç°Ï̻߳á¶ÂÈû£¬Ö±µ½»ñÈ¡µ½Õâ¸öËøÎªÖ¹£¨Èç¹ûûÓÐÖ¸¶¨£¬ÄÇôĬÈÏΪTrue£©;Èç¹ûÉ趨blockingΪFalse£¬Ôòµ±Ç°Ï̲߳»»á¶ÂÈû
#mutex.release()£º»¥³âËøÊÍ·Å״̬

------------------------------Ïß³Ìͬ²½ÖÁ¿ÉÖØÈëËø---------------------------
#Ïß³Ìͬ²½Ö®¿ÉÖØÈëËø
#RLockÄÚ²¿Î¬»¤×ÅÒ»¸öLockºÍÒ»¸öcounter±äÁ¿£¬counter¼Ç¼ÁËacquireµÄ´ÎÊý£¬´Ó¶øÊ¹µÃ×ÊÔ´¿ÉÒÔ±»¶à´Îacquire¡£Ö±µ½Ò»¸öÏß³ÌËùÓеÄacquire¶¼±»release£¬ÆäËûµÄÏ̲߳ÅÄÜ»ñµÃ×ÊÔ´£º
#mutex=threading.RLock()£º´´½¨¿ÉÖØÈëËø
#mutex.acquire()£º¿ÉÖØÈëËøËø¶¨×´Ì¬
#mutex.release()£º¿ÉÖØÈëËøÊÍ·Å״̬
------------------------------Ïß³Ìͬ²½Ö®Ìõ¼þ±äÁ¿---------------------------
#Ïß³Ìͬ²½Ö®Ìõ¼þ±äÁ¿
#PythonÌṩµÄCondition¶ÔÏóÌṩÁ˶Ը´ÔÓÏß³Ìͬ²½ÎÊÌâµÄÖ§³Ö¡£Condition±»³ÆÎªÌõ¼þ±äÁ¿£¬³ýÁËÌṩÓëLockÀàËÆµÄacquireºÍrelease·½·¨Í⣬»¹ÌṩÁËwaitºÍnotify·½·¨¡£Ïß³ÌÊ×ÏÈacquireÒ»¸öÌõ¼þ±äÁ¿£¬È»ºóÅжÏһЩÌõ¼þ¡£Èç¹ûÌõ¼þ²»Âú×ãÔòwait£»Èç¹ûÌõ¼þÂú×㣬½øÐÐһЩ´¦Àí¸Ä±äÌõ¼þºó£¬Í¨¹ýnotify·½·¨Í¨ÖªÆäËûỊ̈߳¬ÆäËû´¦ÓÚwait״̬µÄÏ߳̽ӵ½Í¨Öªºó»áÖØÐÂÅжÏÌõ¼þ¡£²»¶ÏµÄÖØ¸´ÕâÒ»¹ý³Ì£¬´Ó¶ø½â¾ö¸´ÔÓµÄͬ²½ÎÊÌâ¡£
#Condition¶ÔÏóά»¤ÁËÒ»¸öËø£¨Lock/RLock)ºÍÒ»¸öwaiting³Ø¡£Ïß³Ìͨ¹ýacquire»ñµÃCondition¶ÔÏ󣬵±µ÷ÓÃwait·½·¨Ê±£¬Ï̻߳áÊÍ·ÅConditionÄÚ²¿µÄËø²¢½øÈëblocked״̬£¬Í¬Ê±ÔÚwaiting³ØÖмǼÕâ¸öÏ̡߳£µ±µ÷ÓÃnotify·½·¨Ê±£¬Condition¶ÔÏó»á´Ówaiting³ØÖÐÌôѡһ¸öỊ̈߳¬Í¨ÖªÆäµ÷ÓÃacquire·½·¨³¢ÊÔÈ¡µ½Ëø¡£
#Condition¶ÔÏóµÄ¹¹Ô캯Êý¿ÉÒÔ½ÓÊÜÒ»¸öLock/RLock¶ÔÏó×÷Ϊ²ÎÊý£¬Èç¹ûûÓÐÖ¸¶¨£¬ÔòCondition¶ÔÏó»áÔÚÄÚ²¿×ÔÐд´½¨Ò»¸öRLock¡£
#³ýÁËnotify·½·¨Í⣬Condition¶ÔÏó»¹ÌṩÁËnotifyAll·½·¨£¬¿ÉÒÔ֪ͨwaiting³ØÖеÄËùÓÐÏ̳߳¢ÊÔacquireÄÚ²¿Ëø¡£ÓÉÓÚÉÏÊö»úÖÆ£¬´¦ÓÚwaiting״̬µÄÏß³ÌÖ»ÄÜͨ¹ýnotify·½·¨»½ÐÑ£¬ËùÒÔnotifyAllµÄ×÷ÓÃÔÚÓÚ·ÀÖ¹ÓÐÏß³ÌÓÀÔ¶´¦ÓÚ³ÁĬ״̬¡£
#con=threading.Condition()£º´´½¨Ìõ¼þ±äÁ¿
#con.acquire()£ºÌõ¼þ±äÁ¿Ëø¶¨×´Ì¬
#con.wait()£ºÏß³ÌÊÍ·ÅConditionÄÚ²¿µÄËø²¢½øÈëblocked״̬£¬Í¬Ê±ÔÚwaiting³ØÖмǼÕâ¸öÏß³Ì
#con.notify()£ºCondition¶ÔÏó»á´Ówaiting³ØÖÐÌôѡһ¸öỊ̈߳¬Í¨ÖªÆäµ÷ÓÃacquire·½·¨³¢ÊÔÈ¡µ½Ëø
#con.notifyAll()£º»½ÐÑËùÓд¦ÓÚwaiting³ØÖеÄËùÓÐỊ̈߳¬·ÀÖ¹ÓÐÏß³ÌÓÀÔ¶´¦ÓÚ³ÁĬ״̬
#con.release()£ºÌõ¼þ±äÁ¿ÊÍ·Å״̬

------------------------------Ïß³Ìͬ²½Ö®¶ÓÁÐ---------------------------
#from Queue import Queue£º½øÐжÔÓ¦µÄ¶ÓÁаüµÄÒýÓÃ
#queue=Queue()£º¶ÓÁеĴ´½¨
#queue.qsize()£º»ñÈ¡¶ÓÁÐÖÐÄÚÈݵÄÊýÁ¿
#queue.put(ÄÚÈÝ)£ºÏò¶ÓÁÐÖÐÌí¼Ó¶ÔÓ¦µÄÊý¾ÝÐÅÏ¢
#queue.set()£º´Ó¶ÓÁÐÖÐÈ¡³ö¶ÔÓ¦µÄÊý¾Ý
#queue.empty()£º²é¿´µ±Ç°¶ÓÁÐÄÚÈÝÊÇ·ñΪ¿Õ
 Ï̶߳ÓÁÐʵÏÖÉú²úÕßÏû·ÑÕß
------------------------------Ï̼߳äͨÐÅ---------------------------
threading.Event¿ÉÒÔʹһ¸öÏ̵߳ȴýÆäËûÏ̵߳Ä֪ͨ¡£ÆäÄÚÖÃÁËÒ»¸ö±êÖ¾£¬³õʼֵΪFalse¡£Ïß³Ìͨ¹ýwait()·½·¨½øÈëµÈ´ý״̬£¬Ö±µ½ÁíÒ»¸öÏ̵߳÷ÓÃset()·½·¨½«ÄÚÖñêÖ¾ÉèÖÃΪTrueʱ£¬Event֪ͨËùÓеȴý״̬µÄÏָ̻߳´ÔËÐС£»¹¿ÉÒÔͨ¹ýisSet()·½·¨²éѯEnvent¶ÔÏóÄÚÖÃ״̬µÄµ±Ç°Öµ¡£
#event=threading.Event()£º½øÐжÔÓ¦Envent¶ÔÏóµÄ´´½¨
#self.threadEvent=event £ºÖع¹¶ÔÓ¦threading.Thread»ùÀàÖеÄ__init__µÄ·½·¨¡£ 
#self.threadEvent.wait()£ºÊ¹Ï߳̽øÈëµÈ´ý״̬
#event.set()£ºÆô¶¯waiting³ØÖеȴýµÄÏß³Ì

------------------------------Ï̵߳ĺϲ¢ºÍºǫ́Ïß³Ì---------------------------
pythonµÄThreadÀàÖл¹ÌṩÁËjoin()·½·¨£¬Ê¹µÃÒ»¸öÏ߳̿ÉÒԵȴýÁíÒ»¸öÏß³ÌÖ´ÐнáÊøºóÔÙ¼ÌÐøÔËÐС£Õâ¸ö·½·¨»¹¿ÉÒÔÉ趨һ¸ötimeout²ÎÊý£¬±ÜÃâÎÞÐÝÖ¹µÄµÈ´ý¡£ÒòΪÁ½¸öÏß³Ì˳ÐòÍê³É£¬¿´ÆðÀ´ÏóÒ»¸öỊ̈߳¬ËùÒÔ³ÆÎªÏ̵߳ĺϲ¢¡£
ĬÈÏÇé¿öÏ£¬Ö÷Ïß³ÌÔÚÍ˳öʱ»áµÈ´ýËùÓÐ×ÓÏ̵߳ĽáÊø¡£Èç¹ûÏ£ÍûÖ÷Ï̲߳»µÈ´ý×ÓỊ̈߳¬¶øÊÇÔÚÍ˳öʱ×Ô¶¯½áÊøËùÓеÄ×ÓỊ̈߳¬¾ÍÐèÒªÉèÖÃ×ÓÏß³ÌΪºǫ́Ïß³Ì(daemon)¡£·½·¨ÊÇͨ¹ýµ÷ÓÃÏß³ÌÀàµÄsetDaemon()·½·¨¡£
#myThread.setDaemon(True)£º½«¸ÃÏß³ÌתΪºǫ́Ïß³Ì

------------------------------ThreadLocal---------------------------
global_dict={}
global_dict[threading.current_thread()]

------------------------------¶à½ø³Ì---------------------------
ÔÚUnix/Linux²Ù×÷ϵͳÖУ¬ÌṩÁËÒ»¸öfork()ϵͳº¯Êý£¬Ëü·Ç³£ÌØÊâ¡£
ÆÕͨµÄº¯Êýµ÷Ó㬵÷ÓÃÒ»´Î£¬·µ»ØÒ»´Î£¬µ«ÊÇfork()µ÷ÓÃÒ»´Î£¬·µ»ØÁ½´Î£¬ÒòΪ²Ù×÷ϵͳ×Ô¶¯°Ñµ±Ç°½ø³Ì£¨³ÆÎª¸¸½ø³Ì£©¸´ÖÆÁËÒ»·Ý£¨³ÆÎª×Ó½ø³Ì£©£¬È»ºó£¬·Ö±ðÔÚ¸¸½ø³ÌºÍ×Ó½ø³ÌÄÚ·µ»Ø¡£
×Ó½ø³ÌÓÀÔ¶·µ»Ø0£¬¶ø¸¸½ø³Ì·µ»Ø×Ó½ø³ÌµÄID¡£
ÕâÑù×öµÄÀíÓÉÊÇ£¬Ò»¸ö¸¸½ø³Ì¿ÉÒÔfork³öºÜ¶à×Ó½ø³Ì£¬ËùÒÔ£¬¸¸½ø³ÌÒª¼ÇÏÂÿ¸ö×Ó½ø³ÌµÄID£¬¶ø×Ó½ø³ÌÖ»ÐèÒªµ÷ÓÃgetppid()¾Í¿ÉÒÔÄõ½¸¸½ø³ÌµÄID¡£
#import os £ºÒýÓöÔÓ¦µÄ½ø³Ì°ü
#pid=os.fork()£º³ÌÐòÖ´Ðе½os.fork()ʱ£¬²Ù×÷ϵͳ»á´´½¨Ò»¸öеĽø³Ì£¨×Ó½ø³Ì£©£¬È»ºó¸´ÖƸ¸½ø³ÌµÄËùÓÐÐÅÏ¢µ½×Ó½ø³ÌÖУ¬È»ºó¸¸½ø³ÌºÍ×Ó½ø³Ì¶¼»á´Ófork()º¯ÊýÖеõ½Ò»¸ö·µ»ØÖµ£¬Æä½ø³ÌÖÐÕâ¸öÖµÒ»¶¨ÊÇ0£¬¶ø¸¸½ø³ÌÖÐÊÇ×Ó½ø³ÌµÄ idºÅ
#os.getpid()£º»ñÈ¡µ±Ç°½ø³ÌµÄpid
#os.getppid()£º»ñÈ¡¸¸½ø³ÌµÄpid
------------------------------multiprocessingÄ£¿é---------------------------
#from multiprocessing import Process£ºmultiprocessingÄ£¿éÌṩÁËÒ»¸öProcessÀàÀ´´ú±íÒ»¸ö½ø³Ì¶ÔÏó¡£
#p=Process(target=run_proc,args=('test',))£º´´½¨¶ÔÓ¦µÄ½ø³Ì¶ÔÏó
#p.start()£º½ø³ÌµÄÆô¶¯
#p.join()£ºmultiprocessingÄ£¿éÌṩÁËÒ»¸öProcessÀàÀ´´ú±íÒ»¸ö½ø³Ì¶ÔÏó£¬ÏÂÃæµÄÀý×ÓÑÝʾÁËÆô¶¯Ò»¸ö×Ó½ø³Ì²¢µÈ´ýÆä½áÊø
#multiprocessing.cpu_count()£º²é¿´¶ÔÓ¦µÄcpuºËÊý
#pipe=multiprocessing.Pipe()£º´´½¨Ò»¸ö¹ÜµÀ£¬¹ÜµÀÁ½¸ö¶Ë¿Úµ÷Ó÷ֱðΪpipe[0],pipe[1]
#pipe[0].send(i)£ºÎª¹ÜµÀÒ»²à½øÐÐÄÚÈݵÄÌí¼Ó²Ù×÷
#pipe[0].recv()£º»ñÈ¡¹ÜµÀÒ»²àµÄÄÚÈÝÐÅÏ¢



×÷ÕߣºÀÖÓã²¥¿ÍPython+È˹¤ÖÇÄÜ¿ª·¢ÅàѵѧԺ
Ê×·¢£º
http://python.itcast.cn/
0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿