"""實現執行緒的反覆呼叫
用乙個執行緒執行多個任務
"""import
threading
import
queue
class
mythread(threading.thread):
"""通過一些方法實現執行緒的反覆呼叫
"""def
__init__
(self):
super().
__init__
() self.queue = queue.queue() #
例項化佇列
self.daemon = true #
# 設定為守護執行緒,隨著主線程結束而結束
self.start() #
開啟執行緒,讓執行緒在例項時就開啟
defrun(self):
"""通過while true實現反覆呼叫的過程
讓執行緒去呼叫
:return:
"""while
true:
#從對列中取出處理任務的函式及引數,然後呼叫處理邏輯
func, args, kwargs =self.queue.get()
#任務處理
func(*args, **kwargs)
#標識本次任務處理完畢,並通知queue.join
self.queue.task_done() #
佇列內部的計數器,每次執行任務,呼叫一次
"""接受待處理任務的函式及其引數,並傳入到佇列中
:param func: 待處理任務
:return:
"""#
將待處理任務的函式及其引數存入到佇列中
self.queue.put((func, args, kwargs))
def join(self, timeout=none):
"""等待佇列中的任務處理完畢
:param timeout:
:return:
"""#
從task_done()中獲取任務是否處理完畢
self.queue.join()
deffunc1():
"""待處理邏輯,需要執行緒去完成的任務
:return:
"""print('
thread to do sth_1... ')
deffunc2():
"""待處理邏輯,需要執行緒去完成的任務
:return:
"""print('
thread to do sth_2... ')
deffunc3():
"""待處理邏輯,需要執行緒去完成的任務
:return:
"""print('
thread to do sth_3... ')
if__name__ == '
__main__':
t = mythread() #
例項乙個執行緒
#讓執行緒t完成func1,func2,func3三個任務
t.join() # 等待任務結束
併發程式設計 程序池與執行緒池 練習3
通過繼承multipocessing類,實現乙個程序池。coding utf 8 實現乙個程序池 import time import multiprocessing from multiprocessing import manager,queue class myprocess object d...
併發程式設計 程序池與執行緒池 練習2
通過繼承threading類,實現乙個執行緒池 coding utf 8 自己實現乙個執行緒池 import time import queue import threading class mythreadpool object def init self,num super init self....
併發程式設計 執行緒池與程序池
以時間換空間 程序池 乙個容器,這個容器限制住你開啟程序的數量,預設是os.cpu count 我的電腦是8核,所以能開啟8個,第一次肯定只能並行的處理8個任務,只要有任務完成,程序馬上就會接下乙個任務。實現 from concurrent.futures import processpoolexe...