python多線程的使用
后續(xù)還會更新其他方法實現(xiàn)的多線程方援。
Queue實現(xiàn)多線程
通過隊列實現(xiàn)多線程
- 啟動一定數(shù)量的線程(個數(shù)自己定義)背捌,線程都是從隊列中獲取數(shù)據(jù)去執(zhí)行的癌刽。
- 依次往隊列中加入數(shù)據(jù)。
#啟動隊列
#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() #一個隊列
for thread_num in range(THREAD_NUM):
#啟動一定數(shù)量的線程
thread_work = Thread_Worker(queue_task)
thread_work.daemon = True #設(shè)置為守護線程步绸,在進程退出時不用等待這個線程退出掺逼。
thread_work.start()
for each_task in get_task():
#往隊列中加入任務(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()
#### 標題
#在完成一項工作之后,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊列發(fā)送一個信號
#Thread_Task.py
def get_task():
for i in range(20):
yield(i)
輸出
python my_threading.py
python my_threading.py
輸出結(jié)果