第18章 多執行緒程式設計 3

2021-06-01 06:03:28 字數 2176 閱讀 1391

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...