python多線程的使用

python多線程的使用

后續(xù)還會(huì)更新其他方法實(shí)現(xiàn)的多線程。

Queue實(shí)現(xiàn)多線程

通過(guò)隊(duì)列實(shí)現(xiàn)多線程

  1. 啟動(dòng)一定數(shù)量的線程(個(gè)數(shù)自己定義),線程都是從隊(duì)列中獲取數(shù)據(jù)去執(zhí)行的。
  2. 依次往隊(duì)列中加入數(shù)據(jù)。
#啟動(dòng)隊(duì)列
#my_threading.py
from queue import Queue
from Thread_Worker import Thread_Worker
from Thread_Task import get_task
THREAD_NUM = 10
queue_task = Queue()    #一個(gè)隊(duì)列
for thread_num in range(THREAD_NUM):
    #啟動(dòng)一定數(shù)量的線程
    thread_work = Thread_Worker(queue_task)
    thread_work.daemon = True   #設(shè)置為守護(hù)線程,在進(jìn)程退出時(shí)不用等待這個(gè)線程退出。
    thread_work.start()

for each_task in get_task():
    #往隊(duì)列中加入任務(wù)數(shù)據(jù)
    queue_task.put(each_task)

queue_task.join()
#Thread_Worker.py
from threading import Thread
import time

def start_task(task_num):
    #自定義的需要多線程跑的任務(wù)
    print("this is task {}".format(task_num))
    time.sleep(5)
    print("task {} is done".format(task_num))
    
class Thread_Worker(Thread):
    
    def __init__(self, queue_task):
        super(Thread_Worker, self).__init__()
        self.queue_task = queue_task
        
    def run(self):
        while True:
            task = self.queue_task.get()
            start_task(task)
            self.queue_task.task_done() 

#### 標(biāo)題

#在完成一項(xiàng)工作之后,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號(hào)
#Thread_Task.py
def get_task():
    for i in range(20):
        yield(i)

輸出

python my_threading.py
python my_threading.py
輸出結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容