併發程式設計 程序池與執行緒池 練習1

2022-09-09 09:06:10 字數 1561 閱讀 4394

"""

實現執行緒的反覆呼叫

用乙個執行緒執行多個任務

"""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...