我有3个项目的for
循环。在for
循环内,对于每个项目,我生成了15个线程。这些都会将数据返回给我的GUI,但是会发生for
循环执行,所有3个项目都会运行,并生成45个线程。我正在尝试运行第一项,等到15个线程完成,然后运行第二个项目。我需要在不使用join()
的情况下完成所有这些操作。
我认为这可以通过queue
完成,但在阻止时遇到问题。当我尝试以下操作时,它永远不会移动到第二组15个线程:
while True:
try:
data = q.get(False)
except Query.Empty():
data = None
这可以阻止阻塞问题并使用15个线程中的每个线程执行的功能不断更新GUI,但是一旦执行,它就会结束并且不会继续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
答案 0 :(得分:0)
当活动线程数下降到1时(假设您没有任何其他线程处于活动状态),可以通过中断while True
循环来轻松解决这个问题。尝试
while True:
try:
data = q.get(False)
except Query.Empty():
data = None
if threading.active_count() == 1:
break
您可以使用现在拥有的相同循环体,但将while条件更改为
while threading.active_count() > 1: