名稱種類全稱。我正在用python 2.7編寫這個程序,並且我正在嘗試利用線程隊列來創建大量的web請求。問題出在這裏:我想有兩個不同的隊列,一個處理線程請求,另一個處理響應。如果我的程序中有一個未命名爲「隊列」的隊列,例如,如果我想將初始隊列命名爲「input_q」,那麼程序崩潰並拒絕工作。這對我來說絕對沒有意義。在下面的代碼中,所有導入的自定義模塊都可以正常工作(至少,它們是獨立完成的,通過了所有單元測試,並且沒有看到任何可能成爲問題根源的原因)。奇怪的python隊列行爲。如果隊列未被命名爲「隊列」,則崩潰
另外,通過診斷語句,我確定它在產生線程池之前崩潰。
在此先感謝。
編輯:崩潰在這裏可能是錯誤的術語。它實際上只是停止。即使在等待半小時完成後,當原始程序在30秒內運行時,程序也不會運行。當我告訴它打印出檢查結果時,它只會使其列入清單的一部分,停在入口中間,什麼都不做。編輯2:對不起浪費大家的時間,我忘了這篇文章。有人改變了我的一個自定義模塊(threadcheck)。它看起來像是初始化模塊,然後沿着它與程序其餘部分的快樂方式運行。 Threadcheck在初始化之後崩潰了,當程序處於計算過程中時,崩潰正在使整個過程失敗。
代碼:
from binMod import binExtract
from grabZip import grabZip
import random
import Queue
import time
import threading
import urllib2
from threadCheck import threadUrl
import datetime
queue = Queue.Queue()
#output_q = Queue.Queue()
#input_q = Queue.Queue()
#output = queue
p=90
qb = 22130167533
url = grabZip(qb)
logFile = "log.txt"
metaC = url.grabMetacell()
toCheck = []
print metaC[0]['images']
print "beginning random selection"
for i in range(4):
if (len(metaC[i]['images'])>0):
print metaC[i]['images'][0]
for j in range(len(metaC[i]['images'])):
chance = random.randint(0, 100)
if chance <= p:
toCheck.append(metaC[i]['images'][j]['resolution 7 url'])
print "Spawning threads..."
for i in range(20):
t = threadUrl(queue)
t.setDaemon(True)
t.start()
print "initializing queue..."
for i in range(len(toCheck)):
queue.put(toCheck[i])
queue.join()
#input_q.join()
output = open(logFile, 'a')
done = datetime.datetime.now()
results = "\n %s \t %s \t %s \t %s"%(done, qb, good, bad)
output.write(results)
它如何崩潰?它是否提供錯誤信息? – BrenBarn
這個名字沒有任何作用,所以你只是搞砸了重命名。也許有一個異常在線程中被吞噬,或者你等待一個空隊列 –
「它在產生線程池之前崩潰」?在產卵線程之前您甚至不使用隊列。 –