这个名字就说明了一切。我在python 2.7中编写这个程序,我正在尝试利用线程队列来制作一大堆Web请求。这是问题所在:我希望有两个不同的队列,一个用于处理线程请求,另一个用于处理响应。如果我的程序中有一个名为“queue”的队列,例如,如果我想将初始队列命名为“input_q”,那么程序崩溃并且拒绝工作。这对我来说完全没有意义。在下面的代码中,所有导入的自定义模块都可以正常工作(至少,它们是独立完成的,通过了所有单元测试,并且看不出它们可能是问题的根源)。
此外,通过诊断语句,我确定它在产生线程池之前崩溃。
提前致谢。
编辑:崩溃可能是错误的术语。它实际上只是停止了。即使在等待半小时完成后,当原始程序在30秒内运行时,程序也不会运行。当我告诉它打印出来检查时,它只能让它在列表中分开,在条目中间停止,什么都不做。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)
答案 0 :(得分:0)
名称是什么与Python无关 - Python并不关心,对象本身(大多数情况下)甚至不知道它们被分配到的名称。所以问题必须在其他地方。
正如评论中所建议的那样,请仔细检查queue
的重命名。
另外,请在没有守护进程模式的情况下尝试。