目前python 提供了幾種多線程實(shí)現(xiàn)方式 thread,threading,multithreading ,其中thread模塊比較底層,而threading模塊是對(duì)thread做了一些包裝,可以更加方便的被使用。
2.7版本之前python對(duì)線程的支持還不夠完善,不能利用多核CPU,但是2.7版本的python中已經(jīng)考慮改進(jìn)這點(diǎn),出現(xiàn)了multithreading 模塊。threading模塊里面主要是對(duì)一些線程的操作對(duì)象化,創(chuàng)建Thread的class。一般來說,使用線程有兩種模式:
A 創(chuàng)建線程要執(zhí)行的函數(shù),把這個(gè)函數(shù)傳遞進(jìn)Thread對(duì)象里,讓它來執(zhí)行;
B 繼承Thread類,創(chuàng)建一個(gè)新的class,將要執(zhí)行的代碼 寫到run函數(shù)里面。
本文介紹兩種實(shí)現(xiàn)方法。
第一種 創(chuàng)建函數(shù)并且傳入Thread 對(duì)象中
t.py 腳本內(nèi)容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import threading,time from time import sleep, ctime def now() : return str ( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) ) def test(nloop, nsec): print 'start loop' , nloop, 'at:' , now() sleep(nsec) print 'loop' , nloop, 'done at:' , now() def main(): print 'starting at:' ,now() threadpool = [] for i in xrange ( 10 ): th = threading.Thread(target = test,args = (i, 2 )) threadpool.append(th) for th in threadpool: th.start() for th in threadpool : threading.Thread.join( th ) print 'all Done at:' , now() if __name__ = = '__main__' : main() |
thclass.py 腳本內(nèi)容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import threading ,time from time import sleep, ctime def now() : return str ( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) ) class myThread (threading.Thread) : """docstring for myThread""" def __init__( self , nloop, nsec) : super (myThread, self ).__init__() self .nloop = nloop self .nsec = nsec def run( self ): print 'start loop' , self .nloop, 'at:' , ctime() sleep( self .nsec) print 'loop' , self .nloop, 'done at:' , ctime() def main(): thpool = [] print 'starting at:' ,now() for i in xrange ( 10 ): thpool.append(myThread(i, 2 )) for th in thpool: th.start() for th in thpool: th.join() print 'all Done at:' , now() if __name__ = = '__main__' : main() |
以上就是本文的全部?jī)?nèi)容嗎,希望對(duì)大家學(xué)習(xí)python程序設(shè)計(jì)有所幫助。