python的threading是什么意思_Python中的threading模块是什么
threading提供了一個比thread模塊更高層的API來提供線程的并發性。這些線程并發運行并共享內存。
下面來看threading模塊的具體用法:
一、Thread的使用,目標函數可以實例化一個Thread對象,每個Thread對象代表著一個線程,可以通過start()方法,開始運行。
這里對使用多線程并發,和不適用多線程并發做了一個比較:
首先是不使用多線程的操作:
代碼如下:#!/usr/bin/python
#compare?for?multi?threads
import?time
def?worker():
print?"worker"
time.sleep(1)
return
if?__name__?==?"__main__":
for?i?in?xrange(5):
worker()
執行結果如下:
下面是使用多線程并發的操作:
代碼如下:#!/usr/bin/python
import?threading
import?time
def?worker():
print?"worker"
time.sleep(1)
return
for?i?in?xrange(5):
t?=?threading.Thread(target=worker)
t.start()
可以明顯看出使用了多線程并發的操作,花費時間要短的很多。
二、threading.activeCount()的使用,此方法返回當前進程中線程的個數。返回的個數中包含主線程。
代碼如下:#!/usr/bin/python
#current's?number?of?threads
import?threading
import?time
def?worker():
print?"test"
time.sleep(1)
for?i?in?xrange(5):
t?=?threading.Thread(target=worker)
t.start()
print?"current?has?%d?threads"?%?(threading.activeCount()?-?1)
三、threading.enumerate()的使用。此方法返回當前運行中的Thread對象列表。
代碼如下:#!/usr/bin/python
#test?the?variable?threading.enumerate()
import?threading
import?time
def?worker():
print?"test"
time.sleep(2)
threads?=?[]
for?i?in?xrange(5):
t?=?threading.Thread(target=worker)
threads.append(t)
t.start()
for?item?in?threading.enumerate():
print?item
for?item?in?threads:
print?item
四、threading.setDaemon()的使用。設置后臺進程。
代碼如下:#!/usr/bin/python
#create?a?daemon
import?threading
import?time
def?worker():
time.sleep(3)
print?"worker"
t=threading.Thread(target=worker)
t.setDaemon(True)
t.start()
print?"haha"
可以看出worker()方法中的打印操作并沒有顯示出來,說明已經成為后臺進程。
threading.Thread
Thread 是threading模塊中最重要的類之一,可以使用它來創建線程。有兩種方式來創建線程:一種是通過繼承Thread類,重寫它的run方法;另一種是創建一個threading.Thread對象,在它的初始化函數(__init__)中將可調用對象作為參數傳入。下面分別舉例說明。先來看看通過繼承threading.Thread類來創建線程的例子:#coding=gbk
import?threading,?time,?random
count?=?0
class?Counter(threading.Thread):
def?__init__(self,?lock,?threadName):
'''@summary:?初始化對象。
@param?lock:?瑣對象。
@param?threadName:?線程名稱。
'''
super(Counter,?self).__init__(name?=?threadName)
#注意:一定要顯式的調用父類的初始
化函數。
self.lock?=?lock
def?run(self):
'''@summary:?重寫父類run方法,在線程啟動后執行該方法內的代碼。
'''
global?count
self.lock.acquire()
for?i?in?xrange(10000):
count?=?count?+?1
self.lock.release()
lock?=?threading.Lock()
for?i?in?range(5):
Counter(lock,?"thread-"?+?str(i)).start()
time.sleep(2)
#確保線程都執行完畢
print?count
在代碼中,我們創建了一個Counter類,它繼承了threading.Thread。初始化函數接收兩個參數,一個是鎖對象,另一個是線程的名稱。在Counter中,重寫了從父類繼承的run方法,run方法將一個全局變量逐一的增加10000。在接下來的代碼中,創建了五個Counter對象,分別調用其start方法。最后打印結果。這里要說明一下run方法 和start方法: 它們都是從Thread繼承而來的,run()方法將在線程開啟后執行,可以把相關的邏輯寫到run方法中(通常把run方法稱為活動[Activity]。);start()方法用于啟動線程。
總結
以上是生活随笔為你收集整理的python的threading是什么意思_Python中的threading模块是什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python文件是怎么写_python头
- 下一篇: sun 些命令可以将服务器设置至ok模式