python多執行緒使用

2021-08-14 14:37:18 字數 4454 閱讀 2851

一、簡介

由於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 threading

from 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,如果是多程序則去掉...