我一直在嘗試在線程化腳本中進行第一次嘗試。它最終會成爲一個網絡刮板,希望能夠比我之前製作的原始線性刮板腳本更快一點。Python線程/線程實現
經過數小時的閱讀和玩一些示例代碼。我仍然不確定在執行過程中什麼被認爲是正確的。
目前,我有下面的代碼,我一直在玩:
from Queue import Queue
import threading
def scrape(queue):
global workers
print worker.getName()
print queue.get()
queue.task_done()
workers -= 1
queue = Queue(maxsize=0)
threads = 10
workers = 0
with open('test.txt') as in_file:
for line in in_file:
queue.put(line)
while not (queue.empty()):
if (threads != workers):
worker = threading.Thread(target=scrape, args=(queue,))
worker.setDaemon(True)
worker.start()
workers += 1
的想法是,我在test.txt文件的URL列表。我打開文件並將所有的URL放入隊列中。從那裏我得到10個線程運行,從隊列中拉出並刮掉一個網頁,或者在這個例子中簡單地打印出被拉出的線。
一旦函數完成,我刪除一個'工作線程',然後一個新的替換它,直到隊列爲空。
在我的現實世界實現某些時候,我將不得不從我的功能scrapes數據並將其寫入.csv文件。但是,現在我只是想了解如何正確實現線程。
我已經看到類似上面的使用'Thread'的例子...並且我還看到了使用繼承類的'線程'示例。我只想知道我應該使用什麼和正確的方式來管理它。
在我這裏很容易,我只是一個試圖理解線程的初學者....是的,我知道它可以變得非常複雜。然而,我認爲這應該是足夠簡單的第一次嘗試...
線程一般來說相當複雜,大多數情況下使用抽象類庫比如多處理(.dummy)或concurrent.futures – janbrohl