我有一个简单的生产者消费者应用程序。
生产者是一个线程,它将数据写入队列,而消费者是一个线程,它从队列中读取消息并执行某些操作,在某些时候退出。
我的生产者代码看起来有点像这样:
def producer(queue):
while not queue.full():
queue.put(randint(1, 199))
以及消费者
def consumer(queue):
for i in range(100):
print(queue.get())
queue.task_done()
在我的主函数中,我像这样调用那些线程:
p = Thread(target=producer)
c = Thread(target=consumer)
p.daemon = True
p.start()
c.start()
c.join()
当c
结束时,唯一剩余的非守护线程是主线程,正确的方式是结束这些线程?
更新
这是我的生产者正在使用的确切代码,因为消费者正在退出并且问题出现在生产者身上。
def generate_random_alphanumerics(msg_queue):
while True:
if not msg_queue.full():
msg_queue.put(hashlib.sha1(bytes(randint(1, 10000))).hexdigest() * 10)
else:
sleep(0.01)
线程休眠是问题所在吗?
sys.exit()
,这其实是不必要的。 - LetsPlayYahtzeesys.execit()
。你问题中的示例代码可能并不准确地代表了你真正的代码。请在阅读如何创建一个最小、完整和可验证的示例后进行[编辑]。 - martineau