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

Ero*_*mic 5 python windows multiprocessing

我相信Windows,因为没有fork,多处理模块在新的Python进程中重新加载模块.

您需要在主脚本中使用此代码,否则会发生非常严重的崩溃

if __name__ == '__main__':
    from multiprocessing import freeze_support
    freeze_support()
Run Code Online (Sandbox Code Playgroud)

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

每当我并行运行某些内容时,所有这些打印语句都会被执行.

我的问题是,是否有办法查看多处理模块是否正在导入模块,如果是这样,那么这些打印语句会被静音?

我基本上看是否有类似的东西:

 import multiprocessing
 if not multiprocessing.in_parallel_process:
     print('Loaded module: ' + __name___)
Run Code Online (Sandbox Code Playgroud)

到目前为止我一直无法找到它.这可能吗?

Pio*_*ost 9

是的,多处理模块确实提供了一种检查模块是在子进程中还是在主进程中执行的方法.

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()
Run Code Online (Sandbox Code Playgroud)

输出:

Hello from the main process
Hello from child process
hello bob
Run Code Online (Sandbox Code Playgroud)