一、簡介
由於python2逐漸不被維護,以及python更優越的效能。後面介紹的python相關知識都是用python3版本寫。
這裡介紹python3的多執行緒相關知識,執行緒的建立使用threading包。
二、簡單執行緒建立
簡介執行緒的建立,先定義執行任務的函式,然後呼叫threading.thread(target=say_hello, args=('one',))方法即可,
啟動執行緒使用start()方法,執行緒等待執行結束使用join()方法。
例項如下:
import threading三、建立執行緒類# def say_hello(x):
# print("%s say hello" % x)
def
main():
# 定義任務處理函式
say_hello = lambda x: print("%s say hello" % x)
# 建立執行緒,args是傳遞的引數
thread_1 = threading.thread(target=say_hello,
args=('one'
,)) # 啟動執行緒
thread_1.start()
# 等待執行緒執行完成
thread_1.join()
if __name__ == '__main__':
main()
建立執行緒的另一種方式,定義執行緒類,執行緒類需繼承threading.thread,
同時定義 __init__方法,用於傳遞的初始化引數,另外定義run(self)方法,用於執行緒執行的操作。
例項如下:
import threading四、執行緒池建立# 建立執行緒類
class sayhellothread(threading.thread):
# 指定執行緒需要的引數name
def
__init__(self
, name):
threading.thread.__init__(self)
self.name = name
# 指定執行緒執行時的操作
def
run(self):
print('%s say hello' % self.name)
def
main():
# 建立執行緒
thread_1 = sayhellothread('one')
# 啟動執行緒
thread_1.start()
# 等待執行緒執行完成
thread_1.join()
if __name__
建立執行緒池使用threadpool.threadpool(n),n表示執行緒池內的執行緒個數。
然後建立執行緒池要執行的任務,使用makerequests(callable_, args_list, callback=none,exc_callback=_handle_thread_exception)方法,
包含執行的方法和引數列表。
執行緒的執行使用putrequest(self, request, block=true, timeout=none)方法。
等待執行緒池執行結束用wait()方法。
例項如下:
import threadpool五、執行緒鎖def
say_hello(name):
print('%s say hello' % str(name))
def
main():
# 建立執行緒池,指定執行緒數為4
pool = threadpool.threadpool(4)
# 指定任務引數列表,裡面乙個元素代表著乙個任務需要的引數
task_param_list = ['one'
, 'two'
, 'three'
, ['four_1'
, 'four_2']]
# 建立任務列表
task_list = threadpool.makerequests(say_hello, task_param_list)
[pool.putrequest(x) for x in task_list]
# 等待任務執行完成
pool.wait()
print("dispose finished")
if __name__ == '__main__':
main()
這裡介紹下用於多執行緒同步的鎖,threading.lock()用於建立鎖,lock.acquire()獲取鎖,lock.release()釋放鎖。
例項如下:
import threading六、執行緒安全的佇列# 建立鎖
lock = threading.lock()
# 建立執行緒類
class sayhellothread(threading.thread):
# 指定執行緒需要的引數
def
__init__(self
, name):
threading.thread.__init__(self)
self.name = name
# 指定執行緒執行時的操作
def
run(self):
# 獲取鎖
lock.acquire()
print('%s say hello' % self.name)
# 釋放鎖
lock.release()
def
main():
# 建立執行緒
thread_1 = sayhellothread('one')
thread_2 = sayhellothread('two')
# 啟動執行緒
thread_1.start()
thread_2.start()
# 等待執行緒執行完成
thread_1.join()
thread_2.join()
if __name__ == '__main__':
main()
另外介紹下執行緒安全的佇列,用queue.queue()建立,可加引數指定佇列的最大個數。
queue.get()用於從佇列取資料,queue.put(item)用於向佇列放資料。
例項如下:
import threadingfrom queue import queue
import time
# 建立執行緒安全的佇列
queue = queue(3)
# 定義生產者執行緒類
class producerthread(threading.thread):
# 指定執行緒需要的引數
def
__init__(self):
threading.thread.__init__(self)
# 指定執行緒執行時的操作
def
run(self):
index = 1
while true:
index += 1
item = "item" + str(index)
# 生產item放入佇列queue中
queue.put(item)
print('%s produce : %s' % (threading.current_thread().getname(), item))
time.sleep(1)
# 定義消費者執行緒類
class customerthread(threading.thread):
# 指定執行緒需要的引數
def
__init__(self):
threading.thread.__init__(self)
# 指定執行緒執行時的操作
def
run(self):
while true:
# 從佇列queue中取資料
item = queue.get()
print('%s consumer : %s' % (threading.current_thread().getname(), item))
def
main():
# 建立生產者執行緒
producer = producerthread()
customer = customerthread()
# 啟動消費者執行緒
producer.start()
customer.start()
if __name__ == '__main__':
main()
python使用多執行緒
做測試的時候,我們不得不接觸下多執行緒,雖然python不能發揮cpu多核的優勢,但是在測試的時候依然十分必要,比如在做介面測試的時候,發出請求之後,在等待伺服器端給予回應的時候,我們不應該傻傻地等,其它執行緒可以在等待的同時發出請求。這樣,我們就能更快地完成我們的測試任務。coding utf 8...
python 多執行緒使用
一 python中的執行緒使用 python中使用執行緒有兩種方式 函式或者用類來包裝執行緒物件。1 函式式 呼叫thread模組中的start new thread 函式來產生新執行緒。如下例 python view plain copy import time import thread def...
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...