0
我有一个for
循环3项。在for
循环内,我为每个项目生成了15个线程。这些都将数据返回到我的GUI,但会发生什么情况是执行for
循环,所有3个项目并贯穿始终,并且会产生45个线程。我试图运行第一个项目,等到15个线程完成,然后运行第二个项目。我需要做所有这些,而不使用join()
。队列阻塞主线程
我想这可以通过queue
完成,但有阻塞的问题。当我尝试以下,它永远不会移动到第二组的15个线程:
while True:
try:
data = q.get(False)
except Query.Empty():
data = None
这将停止阻塞问题,使我的GUI与每个15个线程执行的功能不断更新,但一旦他们执行,它只是结束并且不会继续for
循环。这是有问题的循环:
def thing_1(names):
def thready():
print "Hello!"
q.put("Done")
for name in names:
print "Working on " + name
t1 = threading.Thread(target=thready)
t1.start()
# Then put 'while True' here
你也可以考虑增加一个小的(25毫秒?)睡眠进入while循环,以避免您的GUI线程占用了太多的CPU时间。 – holdenweb
似乎是超越'except'部分的问题。如果我用'print'Hello'''替换新的if语句,它甚至不会打印。 –
听起来可能你已经在你的代码中混淆了缩进,但是示例上下文并不足以决定。 while循环应该和上面的for循环相同。通过插入'print'调用来检查while循环实际上是否按照您的想法运行。 – holdenweb