我有一个Python程序,它产生多个生产者线程,然后有一个循环等待Queue对象在其中有一些东西。它看起来像这样
for t in threads:
t.start()
while len(threads):
if not queue.empty():
response = queue.get()
# handle response
queue.task_done()
else:
sleep(1)
threads = [t for t in threads if t.is_alive()]必须有一种更优雅的方式来做到这一点。我已经研究了threading模块提供的所有同步对象,但我不知道如何应用它们。
仅供参考,我的代码可以满足我想要做的事情。我坚信不要修复没有损坏的东西,但我只是觉得有一种更好的方法可以做到这一点,一个更好的程序员会在第一时间做到这一点。
发布于 2015-06-11 06:04:24
您可以使用weakref来测试线程是否仍处于活动状态:
import weakref
def consumer(queue, threads):
while threads:
try:
response = queue.get(timeout=1)
# handle response
queue.task_done()
except Empty:
pass
threads = weakref.WeakSet()
for i in range(10):
t = threading.Thread(...)
t.start()
threads.add(t)
del t # remove all references to threads
consumer(queue, threads)https://stackoverflow.com/questions/30767828
复制相似问题