這篇
threading
教程
是我自己工作和學習的總結。
建立多執行緒常用的三種方法: 建立
thread
的例項,傳給它乙個函式
建立thread的例項,傳給它乙個可呼叫的類例項(不推薦)
派生thread的子類,並建立子類的例項(推薦)
建立thread的例項,傳給它乙個函式
#!/usr/bin/env python
# coding:utf-8
import threading
from time import ctime, sleep
loops = [4, 2]
def loop(n, sec):
print 'start loop', n, ' at: ', ctime()
sleep(sec)
print 'loop', n, ' 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: # start threads
threads[i].start()
for i in nloops: # wait for all threads to finish
threads[i].join()
print 'all done at: ', ctime()
if __name__ == '__main__':
main()
執行結果:
liuqian@ubuntu:~$ python test_threading1.py
starting at: wed jul 20 13:20:06 2016
start loop 0 at: wed jul 20 13:20:06 2016
start loop 1 at: wed jul 20 13:20:06 2016
loop 1 done at: wed jul 20 13:20:08 2016
loop 0 done at: wed jul 20 13:20:10 2016
all done at: wed jul 20 13:20:10 2016
【說明】
join([timeout])方法將等待執行緒結束,或者在提供了超時時間的情況下達到超時時間。對於join()方法而言,其實它根本不需要呼叫。一旦執行緒啟動,它就會一直執行,直到給定的函式完成後退出。如果主線程還有其他事情要去做,而不是等待這些執行緒完成(例如其他處理或者等待新的客戶端請求),就可以不呼叫join()。join()只在你需要等待執行緒完成的時候才是有用的。
建立thread的例項,傳給它乙個可呼叫的類例項
#!/usr/bin/env python
# coding:utf-8
import threading
from time import ctime, sleep
loops = [4,2]
class threadfunc(object):
def __init__(self, func, args, name=''):
self.name = name
self.func = func
self.args = args
def __call__(self):
self.func(*self.args)
def loop(n, sec):
print 'start loop', n, ' at: ', ctime()
sleep(sec)
print 'loop', n, ' 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: # start threads
threads[i].start()
for i in nloops: # wait for all threads to finish
threads[i].join()
print 'all done at: ', ctime()
if __name__ == '__main__':
main()
輸出與第乙個案例一樣。
【說明】當建立新執行緒時,thread類的**將呼叫threadfunc物件,此時會呼叫__cal__()這個特殊方法。
派生thread的子類,並建立子類的例項(推薦)
#!/usr/bin/env python
# coding:utf-8
import threading
from time import ctime, sleep
loops = [4,2]
class mythread(threading.thread):
def __init__(self, func, args, name=''):
threading.thread.__init__(self)
self.name = name
self.func = func
self.args = args
def run(self): # 必須要寫
self.func(*self.args)
def loop(n, sec):
print 'start loop', n, ' at: ', ctime()
sleep(sec)
print 'loop', n, ' done at: ', ctime()
def main():
print 'starting at: ', ctime()
threads =
nloops = range(len(loops))
for i in nloops:
t = mythread(loop, (i, loops[i]), loop.__name__)
for i in nloops: # start threads
threads[i].start()
for i in nloops: # wait for all threads to finish
threads[i].join()
print 'all done at: ', ctime()
if __name__ == '__main__':
main()
劉[小]倩
python中的執行緒使用 threading模組
最近又用到了python中的多執行緒程式設計,前段時間使用並學習過,但是由於長時間不用,慢慢就忘記怎麼用了,畢竟對執行緒的使用還不是很熟練,現在總結一下,記錄下來,加深一下學習的印象。python中關於執行緒,主要有兩個模組thread和threading,其中thread的模組已不建議使用,因為t...
11 2 Python多執行緒threading
分程序設定 工具 threading包 1 先寫需要分程序執行的函式或者類 defmaigic pass 2 例項化threading,得到新的程序 threadone threading.thread target maigic 此時還可以接受arg引數import threading impor...
Python3併發程式設計之threading模組
建立執行緒物件 threading.thread 引數 引數 描述group none 該類中的待擴充套件引數。target none 目標函式,即被開闢執行緒的執行任務。預設值為none,表示什麼都不執行。name none 該執行緒的名稱。在預設情況下,執行緒的唯一名稱以 thread n 的形...