python - 有没有办法检查 Windows 中的多处理标准模块是否正在加载模块?

标签 python windows multiprocessing

我相信在 Windows 上,因为没有 forkmultiprocessing 模块会在新的 Python 进程中重新加载模块。

你必须在你的主脚本中有这段代码,否则会发生非常严重的崩溃

if __name__ == '__main__':
    from multiprocessing import freeze_support
    freeze_support()

我有一堆模块,它们在模块级别有调试打印语句。因此,只要加载模块,就会调用 print 语句。

每当我并行运行一些东西时,所有这些打印语句都会被执行。

我的问题是,是否有办法查看 multiprocessing 模块是否正在导入模块,如果是,则停止打印语句?

我基本上是在寻找是否有类似的东西:

 import multiprocessing
 if not multiprocessing.in_parallel_process:
     print('Loaded module: ' + __name___)

到目前为止我一直找不到它。这可能吗?

最佳答案

对于 Python 3.8 和更新版本使用 multiprocessing.parent_process()仅对主进程返回 None,对于早期版本,检查 name 属性的值是否等于 MainProcess

from multiprocessing import Process, current_process

if current_process().name == 'MainProcess':
    print('Hello from the main process')
else:
    print('Hello from child process')

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

输出:

Hello from the main process
Hello from child process
hello bob

关于python - 有没有办法检查 Windows 中的多处理标准模块是否正在加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216050/

相关文章:

Windows批处理脚本从文件名中删除括号中的文本?

python - 如何并行执行 python 子测试?

c - 按任务同步 fork 的子进程

python多线程等待所有线程完成

Python - 如何在窗口中显示透明图像?

Windows Azure ACS 更改生产部署的联合元数据和 Web.Config

python - 在不同的进程中使用管理器/代理公开对象

python - 根据列值在数据框中添加空白单元格(excel : insert cell and shift right)

python - Django-Cities-Light,在 postgresql 中将字段更改为foreignkey会引发错误

c# - 使用管理权限启动我的 C# 应用程序