18.5 threading模組
threading模組支援守護執行緒,它們是這樣工作的:守護執行緒一般是乙個等待客戶請求伺服器,如果客戶提出請求,它就在那等著。如果你設定乙個執行緒為守護執行緒,就表示你在說這個執行緒是不重要的,在程序退出的時候,不用等待這個執行緒退出。
如果你想要等待子執行緒完成再退出,那就什麼都不用做,或者顯式地呼叫thread.setdaemon(false)以保證其daemon標誌為false。你可以呼叫thread.isdaemon()函式來判斷其daemon標誌的值。新的子執行緒會繼承其父執行緒的daemon標誌。整個python會在所有的非守護執行緒退出後才會結束,即程序中沒有非守護執行緒存在的時候才結束。
18.5.1 thread類
import threading
from time import ctime, sleep
loops = [4, 2]
def loop(nloop, nsec):
print 'start loop ', nloop, ' at: ', ctime()
sleep(nsec)
print 'loop ', nloop, ' done at: ', ctime()
def main():
print 'starting at: ', ctime()
threads =
nloops = range(len(loops))
for i in nloops:
t = threading.thread(target = loop, args = (i, loops[i]))
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print 'all done at: ', ctime()
main()
例項化每個thread物件的時候,我們把函式(target)和引數(args)傳進去,得到返回的thread例項。例項化乙個thread(呼叫thread())與呼叫thread.start_new_thread()之間最大的區別就是,先的執行緒不會立即開始。當你建立執行緒物件,但不想馬上開始執行執行緒的時候,這是乙個非常有用的同步特性。
join()會等到執行緒結束,或者在給了timeout引數的時候,等到超時為止。
join()的另乙個比較重要的方面是它可以完全不用呼叫。一旦執行緒啟動之後,就會一直執行,知道執行緒的函式結束,退出為止。如果你的主線程除了等待執行緒結束外,還有其他的事情要做,那就不用呼叫join(),只有你要等待執行緒結束的時候才要呼叫join()。
import threading
from time import ctime, sleep
loops = [4, 2]
class threadfunc(object):
def __init__(self, func, args, name=''):
self.func = func
self.args = args
self.name = name
def __call__(self):
def loop(nloop, nsec):
print 'start loop ', nloop, ' at: ', ctime()
sleep(nsec)
print 'loop ', nloop, ' done at: ', ctime()
def main():
print 'starting at: ', ctime()
threads =
nloops = range(len(loops))
for i in nloops:
t = threading.thread(target = threadfunc(loop, (i, loops[i]), loop.__name__))
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print 'all done at: ', ctime()
main()
建立新執行緒的時候,thread物件會呼叫我們的threadfunc物件,這時會用到乙個特殊函式__call__()。 Python核心程式設計 第18章 多執行緒
1.對python虛擬機器的訪問由全域性直譯器鎖來控制,正是這個鎖能保證同一時刻只有乙個執行緒在執行。import threading loops 4,2 def loop nloop,nsec print start loop nloop,at ctime sleep nsec print loo...
POSIX多執行緒程式設計(第3章 同步)
當多個執行緒對共享資料同時操作時,為了保證共享資料的一致性,需要同步執行緒的讀寫操作。1.1函式 1建立和銷毀互斥量 include 動態建立和銷毀 int pthread mutex init pthread mutex t mutex,const pthread mutexattr t attr...
第18章 網路程式設計
第18章 網路程式設計 計算機上面可以安裝非常多的應用軟體,那麼如何區分這些軟體?需要通過埠號來區分,埠號,相當與房子中開的們.一 埠號在計算機裡面有2個位元組那麼大,因此埠號的取值範圍 0 65535 共65536個 但是1024以下的埠號,通常是計算機內建軟體埠 類似於現實生活中的短號號碼 12...