python - 有没有办法从 python3 中的 multiprocessing.Pool() 工作人员更新和打印到单个 tqdm 进度条?
问题描述
我multiprocessing.Pool().starmap()
用来处理在运行时动态导入的模块中的函数。这些函数中的每一个实际上都运行一个 R 脚本,我想在tqdm
完成运行脚本时更新进度条,而不是在我将工作人员分配给给定输入时。我还想打印带有tqdm.write()
或类似内容的消息以提供更新,而无需以奇怪的方式与进度条交互。我尝试了一个全局类,但我认为它是进程间通信的问题。这是我到目前为止所尝试的:
# main.py
import globals
import multiprocessing
# ...
if (whatever):
import random_module
# ...
multiprocessing.Pool(4).starmap(random_module.run, parameters)
# ...
# global.py
import tqdm.tqdm as tqdm
progbar = tqdm()
# random_module.py
import globals
def run(parameters):
result = # do some R script with subprocessing
globals.update(1)
globals.write('processed parameter: ' + paramaters)
return result
外部功能是一种伪编码(示例过于复杂),但 tqdm 部分基本上是我所拥有的。确实,我需要一种进程安全的方式来向主进程发出信号,表明我完成了我需要做的事情,但无需处理管道或其他高开销进程消息传递。谢谢!
解决方案
推荐阅读
- c++ - cmake 多个目标 - 一个仅标头目标和另一个可执行文件
- java - 具有 IBM Websphere 依赖项的 SAXParser 实现
- kendo-ui-angular2 - Kendo Angular TreeView 的拖放
- meson-build - 如何使介子对象保持不变?
- javascript - 如何将 python-cgi 变量发送回我的 javascript?
- laravel - ReflectionException:类 App\Http\Controllers\Auth\LoginController 不存在
- node.js - Node.js 是否支持 String.MatchAll 方法?
- python - 启动不阻止父重定向到的文件的子进程
- python - Django sqlite3 中的 FOREIGN KEY 约束失败错误
- php - 如何增加特定类别中的帖子