python - Python多线程/多处理断言所有进程在继续之前已同步和暂停
问题描述
我的主应用程序产生了几个子进程或线程。这个数字是可变的,进程/线程可以随时完成。在大多数情况下,孩子们可以正常跑步。但是,在某些时候,我需要能够在给定时刻暂停所有活着的孩子,并确保他们在继续之前都处于同一点。
这正是我需要在主脚本中实现的:
- 数一数还活着的孩子的数量。
- 暂停所有活着的孩子。
- 确认所有活着的孩子确实在我需要他们的地方暂停(而不是陷入长时间的计算)。
- 当所有孩子都同步并暂停时,进行一些处理和保存。
- 释放所有孩子继续。
threading
似乎没有一个同步原语可以满足我的所有需求。我的一些想法:
Event
所有孩子的对象。这满足了我的大部分需求,但我无法检查孩子是否确实在等待Event
. 似乎没有Event.poll()
方法或类似的方法。- 使用
Barrier
. 这似乎具有我需要的几乎所有元素,但是,就等待方的数量和Barrier
所有线程的发布而言,它是不可变的,而不仅仅是主线程。我想到了一个 hacky 解决方法,当我等待的号码正确reset()
时,主要呼叫。n_waiting
这会导致等待的孩子用BrokenBarrierException
我可以抓住的 a 释放等待。这似乎很hacky。 - 我还考虑过使用
Semaphore
where 主脚本调用acquire()
来捕获与孩子竞争的所有允许的连接,并且只有在收集了所有可能的连接后,主脚本才能继续。这涉及更改其_value
属性以匹配子项的数量,但是这是不安全的。
有没有正确和安全的方法来做我要求的事情?
解决方案
推荐阅读
- javascript - 使用 axios cors 错误响应获取数据
- mongodb - Mongoose - 通过引用字段 _id 查找
- python - 使用python读取excel文件时copy()函数出错
- javascript - 在本地主机服务器上运行 Ajax .POST 并且总是失败?
- sql-server - 这是从 SQL Server 中包含 10M 行的表中的日期时间字段获取 YearMonth 的最快方法
- java - Statistical Firebase crashlytics 让我感到困惑
- react-native - React - 导航到同一个组件的奇怪行为
- hybris - Hybris Backoffice 没有反映真实的数据库值
- java - 如何将txt文档中的字符串转换为代码?
- typescript - 结合映射类型区分已知值的联合