python - 其中一个线程卡住了
问题描述
我编写了一个生产者-消费者脚本,其中有两个队列(比如 q1 和 q2)。脚本中有两个生产者从 q1 读取数据并在 q2 中正确处理一些处理值,现在还有另外两个消费者从 q2 读取值并根据某些定义的条件打印一些值。所有这四个线程都是并行运行的。我正面临消费者在阅读 q2 的所有值后卡住的问题。终止消费者的条件是,如果生产者都已终止并且 q2 为空,但是当我运行此脚本时,它会被其中一个消费者线程卡住,例如,如果消费者 1 完成,则消费者 2 被卡住,反之亦然。
有人能帮我吗?提前致谢!!
class WorkflowProducer1:
def __init__(self,coord_q,wf_q):
self.coord_q=coord_q
self.wf_q=wf_q
def wf_produce1(self):
while not self.coord_q.empty():
coord_id=self.coord_q.get()
wf_id=workflow_finder(coord_id)
if wf_id!='':
self.wf_q.put(wf_id)
if self.coord_q.empty():
print("producer 1 finished")
class WorkflowConsumer1:
def __init__(self,wf_q):
self.wf_q=wf_q
def wf_consume1(self):
while not self.wf_q.empty() or thread1.is_alive() or thread2.is_live():
wf_id=self.wf_q.get()
workflow_validator(wf_id)
解决方案
推荐阅读
- ios - 单选按钮在 ColectionView 单元格中不起作用,如果我选择一个按钮,另一个按钮不会取消选择
- vue.js - 捆绑服务器文件(Vue)并启动生产节点服务器的最佳实践
- julia - 为什么在 Julia 中尝试使用 ggplot 时出现错误?
- php - 在 stream_context_create 上更改 curl
- python - 使用“Pymongo”的“聚合”方法和“MongoDB”的“$project”命令从字典中提取键值并将它们转储到父字典中
- c# - 在二维数组中移动值
- javascript - 如何通知移动键盘有关 html 输入控件所需的输入?
- android - 如何在 listView 中获取单个文件大小
- ansible - 使用 ansible 按顺序克隆 git repo
- python - python中多个EC2实例之间的最快通信方式