Python 執行緒池 佇列任務

2021-09-26 10:48:25 字數 2876 閱讀 6787

現在又佇列長度為n的乙個任務佇列需要處理,同時處理的任務數目為m,如何處理

python3中threading.thread 執行緒,通過start() 方法來啟動,較為簡單的方法就是開始m個任務,m個任務都結束,再執行下一批m個任務,這裡就用到了 futures ,其中又executor.submit() 和 map()方法,分別是有序和無序執行任務。但是這裡的問題就出現了,任務的不同操作時間,讓其餘已完成任務的執行緒出現了等待時間。

執行緒類:

class pool_item(threading.thread):

def __init__(self, threadid, name, counter):

threading.thread.__init__(self)

self.threadid = threadid

self.name = name

self.counter = counter

def run(self):

thread_lock.acquire()

global current_index

while current_index < account_len:

if self.threadid == 1:

print(self.name, current_index)

current_index = current_index + 1

temp = current_index

thread_lock.release()

time.sleep(random.randint(3, 10))

thread_lock.acquire()

print(u'執行緒', self.name, "*************************===")

thread_lock.release()

主方法

for i in range(20):

t = pool_item(i, '[thread-%d]' % i, i)

t.setdaemon(false)

t.start()

執行效果

[thread-1] 1

所有完畢

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

[thread-1] 37

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

[thread-1] 52

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

[thread-1] 71

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

[thread-1] 89

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒數量是21

執行緒 18 [thread-18] *************************===

執行緒 5 [thread-5] *************************===

執行緒數量是19

執行緒 1 [thread-1] *************************===

執行緒 4 [thread-4] *************************===

執行緒 11 [thread-11] *************************===

執行緒 3 [thread-3] *************************===

執行緒數量是15

執行緒 12 [thread-12] *************************===

執行緒數量是14

執行緒 13 [thread-13] *************************===

執行緒 15 [thread-15] *************************===

執行緒 8 [thread-8] *************************===

執行緒 19 [thread-19] *************************===

執行緒數量是10

執行緒 10 [thread-10] *************************===

執行緒 9 [thread-9] *************************===

執行緒數量是8

執行緒 7 [thread-7] *************************===

執行緒 6 [thread-6] *************************===

執行緒數量是6

執行緒 16 [thread-16] *************************===

執行緒 14 [thread-14] *************************===

執行緒數量是4

執行緒 2 [thread-2] *************************===

執行緒 0 [thread-0] *************************===

執行緒數量是2

執行緒 17 [thread-17] *************************===

執行緒數量是1

process finished with exit code 0

python佇列執行緒池 Python多執行緒與佇列

多執行緒爬蟲對比單執行緒爬蟲有很大的優勢,雖然python中的多執行緒並不是真正意義上的多執行緒,執行緒不可以同時執行,而是順序序列執行的,只是在乙個執行緒在等待時,cpu切換到另外乙個執行緒接著幹活,這樣看起來就感覺像是並行。雖然如此,多執行緒的效率仍然比單執行緒快上很多倍,是爬蟲中不可缺少的技能...

執行緒池 1 任務佇列模組

執行緒池的思想早有耳聞,中間也涉及好多內容,回過頭來重新設計一下執行緒池.使用者視角 1.建立乙個執行緒池物件,threadpool thpool int minthreads 同時會建立乙個管理者執行緒,負責維護執行緒池,可以通過演算法動態排程增加或減少執行緒 2.加入乙個任務 int thpoo...

執行緒池概念,任務

問題 執行緒是寶貴的記憶體資源,單個執行緒約佔1mb空間,過多分配易造成記憶體溢位 頻繁的建立及銷毀執行緒會增加虛擬機器 頻率 資源開銷,造成程式效能下降 執行緒池 執行緒容器,可設定執行緒分配的數量上限 將預先建立的執行緒物件存入池中,並重用執行緒池中的執行緒物件 避免頻繁的建立和銷毀 將任務提交...