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

2022-09-09 09:03:11 字數 1532 閱讀 2581

通過繼承threading類,實現乙個執行緒池

#

coding = utf-8

'''自己實現乙個執行緒池

'''import

time

import

queue

import

threading

class

mythreadpool(object):

def__init__

(self, num):

super().

__init__

()

#self.daemon = true # 設定為守護執行緒

self.queue = queue.queue() #佇列#

給定執行緒池大小,並啟動執行緒

for i in range(1, num+1):

thread = threading.thread(target=self.processing, name='

thread_{}

'.format(i), daemon=true)

thread.start()

'''接收待處理任務函式及其引數,並將引數與函式儲存到佇列中,方便執行緒池處理

:param args:

:param kwargs:

:return:

'''self.queue.put((func, args, kwargs))

defprocessing(self):

'''處理任務, 通過while迴圈,從佇列中取出處理任務的函式及其物件引數,並呼叫

:return:

'''while

true:

try:

func, args, kwargs =self.queue.get()

func(*args, **kwargs)

finally

:

#標識此次處理任務結束

self.queue.task_done()

defjoin(self):

'''從task_done中確定佇列是否為空,保證佇列中的任務都已經完成

:return:

'''self.queue.join()

deffunc1():

time.sleep(3)

print('

111'

)def

func2():

time.sleep(3)

print("

222"

)def

func3():

time.sleep(3)

print('

333')if

__name__ == '

__main__':

#例項化乙個執行緒池

threads = mythreadpool(2)

#任務處理

#執行緒池結束

threads.join()

print('

任務結束

')

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

通過繼承multipocessing類,實現乙個程序池。coding utf 8 實現乙個程序池 import time import multiprocessing from multiprocessing import manager,queue class myprocess object d...

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

實現執行緒的反覆呼叫 用乙個執行緒執行多個任務 import threading import queue class mythread threading.thread 通過一些方法實現執行緒的反覆呼叫 def init self super init self.queue queue.queue...

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

以時間換空間 程序池 乙個容器,這個容器限制住你開啟程序的數量,預設是os.cpu count 我的電腦是8核,所以能開啟8個,第一次肯定只能並行的處理8個任務,只要有任務完成,程序馬上就會接下乙個任務。實現 from concurrent.futures import processpoolexe...