我相信在 Windows 上,因为没有 fork,multiprocessing 模块会在新的 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/