这个名字就说明了一切。我正在用 python 2.7 编写这个程序,我试图利用线程队列来发出一大堆网络请求。这就是问题所在:我想要两个不同的队列,一个用于处理线程请求,另一个用于处理响应。如果我的程序中有一个未命名为“queue”的队列,例如,如果我希望将初始队列命名为“input_q”,那么程序将崩溃并拒绝工作。这对我来说完全没有意义。在下面的代码中,所有导入的自定义模块都可以正常工作(至少,它们是独立完成的,通过了所有单元测试,并且看不出有任何原因可能是问题的根源)。
此外,通过诊断语句,我确定它在生成线程池之前就崩溃了。
提前致谢。
编辑:崩溃在这里可能是错误的术语。它实际上只是停止。即使等了半个小时完成,当原始程序运行不到三十秒时,程序也不会运行。当我告诉它打印 toCheck 时,它只会让它在列表中的一部分,停在一个条目的中间,什么也不做。
EDIT2:抱歉浪费大家的时间,我忘记了这篇文章。有人更改了我的一个自定义模块(线程检查)。看起来它正在初始化模块,然后与程序的其余部分一起愉快地运行。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)