奇怪的python队列行为。如果队列未命名为“队列”,则崩溃

时间:2012-09-21 17:54:59

标签: python python-2.7 python-multithreading

这个名字就说明了一切。我在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)   

1 个答案:

答案 0 :(得分:0)

名称是什么与Python无关 - Python并不关心,对象本身(大多数情况下)甚至不知道它们被分配到的名称。所以问题必须在其他地方。

正如评论中所建议的那样,请仔细检查queue的重命名。

另外,请在没有守护进程模式的情况下尝试。