为啥打印在 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 之外调用这个方法? [关闭]