为啥打印在 python 窗口的主块之外执行 3 次?

Posted

技术标签:

【中文标题】为啥打印在 python 窗口的主块之外执行 3 次?【英文标题】:Why the print execute 3 times out of main block in python Window?为什么打印在 python 窗口的主块之外执行 3 次? 【发布时间】:2022-01-08 21:51:00 【问题描述】:

我是 multiprocess 的新手,尝试在 python 中使用 multiprocess 演示。

from multiprocessing import Pool

def foo(a, b):
    print(a,b)
    ...

def bar(a, b):
    print(a,b)
    ...

if __name__ == '__main__':
    pool = Pool(processes=2)
    func_list = [foo, bar]
    for func in func_list:
        pool.apply_async(func, (1, 2))
    pool.close()
    pool.join()

print(123)

当我使用win32 平台时

123 输出总是3

123
1 2
1 2
123
123

但是当使用linux 尝试这个演示时,它会输出一次

1 2
1 2
123

为什么这个打印在 python 窗口的主块外执行 3 次?

【问题讨论】:

【参考方案1】:

这是Windows下multiprocessing的限制,因为它没有fork。这就是为什么 Windows 下的新进程重新导入所有模块而不是从父进程继承解释器状态的原因。您需要将print(123) 移动到if __name__ == '__main__': 保护之下。另见https://***.com/a/24374798/725126

【讨论】:

Mac os和window一样吗?

以上是关于为啥打印在 python 窗口的主块之外执行 3 次?的主要内容,如果未能解决你的问题,请参考以下文章

主从块

Java:为啥我不能在 main 之外调用这个方法? [关闭]

Python 3 - 主线程未检测到后台线程中的KeyboardInterrupt,直到用户将鼠标悬停在GUI窗口上

Python控制流程上下文管理器

为啥在 python 脚本完成之前不执行打印作业?

python的sys模块