12
我有在python這個問題多處理:灌裝隊列和管理蟒蛇
- 我有網址的隊列,我需要不時檢查時間
- 如果隊列被填滿我需要在
- 在隊列中的每個項目必須由一個單一的過程(多處理)
被處理的隊列進行處理的每個項目到目前爲止我設法此「手動」實現這樣的:
while 1:
self.updateQueue()
while not self.mainUrlQueue.empty():
domain = self.mainUrlQueue.get()
# if we didn't launched any process yet, we need to do so
if len(self.jobs) < maxprocess:
self.startJob(domain)
#time.sleep(1)
else:
# If we already have process started we need to clear the old process in our pool and start new ones
jobdone = 0
# We circle through each of the process, until we find one free ; only then leave the loop
while jobdone == 0:
for p in self.jobs :
#print "entering loop"
# if the process finished
if not p.is_alive() and jobdone == 0:
#print str(p.pid) + " job dead, starting new one"
self.jobs.remove(p)
self.startJob(domain)
jobdone = 1
然而,導致噸的問題和錯誤。我想知道我是不是更適合使用Pool過程。什麼是正確的方式來做到這一點?
然而,有很多次我的隊列是空的,它可以通過300項第二填補,所以我也不太清楚怎麼在這裏做的事情。
這並不在Python 2.7.4在Windows上運行,你需要有如果__name__ =「__main__」一部分,你應該通過the_queue作爲第三個參數爲multiprocessing.Pool功能,否則worker_main沒有收到數據 – jhexp
我也有興趣在如何使這片代碼工作。當我運行它,因爲它是那麼它運行,但它打印什麼,可能是因爲worker_main不接收數據。但是,當我通過the_queue作爲第三個參數時,我得到了TypeError:worker_main()參數後必須是一個序列,而不是隊列 – ziky90
@ ziky90你可能忘了'(queue,)'中的昏迷。我編輯了代碼以添加註釋,指出可能的錯誤來源。 –