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

2021-10-14 08:37:46 字數 2874 閱讀 2790

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

雖然如此,多執行緒的效率仍然比單執行緒快上很多倍,是爬蟲中不可缺少的技能之一。

import queue

import threading

import time

def threader():

while not q.empty():

worker = q.get()

time.sleep(0.5)

print(threading.current_thread().name, worker)

q.task_done()

if __name__ == '__main__':

start = time.time()

q = queue.queue()

for worker in range(100):

q.put(worker)

thread_list =

for i in range(10):

t = threading.thread(target=threader)

t.start()

for t in thread_list:

t.join() # 阻塞主線程,讓子執行緒執行完任務

print('任務結束:{}'.format(time.time() - start))

主線程不會等待守護執行緒結束,只要主線程結束了,子執行緒就結束了。

import queue

import threading

import time

def threader():

while true:

worker = q.get()

time.sleep(0.5)

print(threading.current_thread().name, worker)

q.task_done()

if __name__ == "__main__":

start = time.time()

q = queue.queue()

for worker in range(100):

q.put(worker)

for i in range(10):

t = threading.thread(target=threader)

t.daemon = true # 設定守護執行緒,主線程結束,子執行緒就結束

t.start()

q.join() # 佇列任務完成後主執行緒結束

print('任務結束:{}'.format(time.time() - start))

import queue

import threading

import time

class threader(threading.thread):

def __init__(self, q):

threading.thread.__init__(self)

self.q = q

def run(self):

while not self.q.empty():

worker = self.q.get()

time.sleep(0.5)

print(self.getname(), worker)

self.q.task_done()

if __name__ == '__main__':

start = time.time()

q = queue.queue()

for worker in range(100):

q.put(worker)

t_list =

for i in range(10):

threader = threader(q)

threader.start()

for t in t_list:

t.join()

print(f'任務完成:')

import queue

import threading

import time

class threader(threading.thread):

def __init__(self, q):

threading.thread.__init__(self)

self.q = q

self.daemon = true

def run(self):

while true:

worker = self.q.get()

time.sleep(0.5)

print(self.getname(), worker)

self.q.task_done()

if __name__ == '__main__':

start = time.time()

q = queue.queue()

for worker in range(100):

q.put(worker)

for i in range(10):

threader = threader(q)

threader.start()

q.join()

print(f'任務完成:')

Python 執行緒池 佇列任務

現在又佇列長度為n的乙個任務佇列需要處理,同時處理的任務數目為m,如何處理 python3中threading.thread 執行緒,通過start 方法來啟動,較為簡單的方法就是開始m個任務,m個任務都結束,再執行下一批m個任務,這裡就用到了 futures 其中又executor.submit ...

遞迴執行緒池佇列

注意標題裡面有三個keyword,遞迴 執行緒池 佇列 這是我在開發爬蟲程式時候碰到的需求,我們知道爬網頁一般都使用廣度優先搜尋,每個頁面下面都可能有下層頁面。為了加快爬行速度,我們很容易想到用多執行緒來實現。但是多執行緒必須受控,不能無限的建立執行緒,這樣機器受不了,伺服器也受不了。所以多執行緒必...

python實現迴圈佇列 迴圈佇列Python

我試圖在python中建立乙個迴圈佇列,以便在到達陣列中的最後乙個元素時指向頭部。我正在研究排隊方法,我遇到了一些問題。我正在嘗試使用乙個大小為4的陣列,並且能夠將值排隊到第4個點,但是當它執行elif語句時,我收到這個錯誤。typeerror 不支援 的運算元型別 node 和 int 有什麼想法...