Python多处理未调用函数

Python多处理未调用函数,python,python-3.x,jupyter-notebook,multiprocessing,Python,Python 3.x,Jupyter Notebook,Multiprocessing,我试图理解Python中的多处理是如何工作的。下面是一个简单的代码,它没有像我预期的那样调用函数 import time import multiprocessing def do_something(): print('Sleep') time.sleep(1) print('Wake up') start = time.perf_counter() p1 = multiprocessing.Process(target=do_something) p2 = mu

我试图理解Python中的多处理是如何工作的。下面是一个简单的代码,它没有像我预期的那样调用函数

import time
import multiprocessing

def do_something():
    print('Sleep')
    time.sleep(1)
    print('Wake up')

start = time.perf_counter()

p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)

p1.start()
p2.start()

p1.join()
p2.join()

finish = time.perf_counter()

print(f'Finished in {round(finish-start, 2)} second(s)')
在Jupyter笔记本中执行后,我得到以下输出:

Finished in 0.2 second(s)
我想应该是这样的:

Sleep
Sleep
Wake up
Wake up
Finished in 0.2 second(s)
我遗漏了什么?

您应该查看“编程指南”(Programming guidelines)以了解为什么需要:

if __name__ == '__main__' :

在使用多处理的脚本中进行保护。由于您的笔记本中没有该功能,因此无法正常工作。

输出是否符合预期我认为输出处于不同的(子)过程中?在Jupyter笔记本中,它无法按预期工作。我在Linux Mint上的Jupyter笔记本中获得了预期输出。这与Windows有关,它不允许生成进程,我在Spyder中尝试了相同的代码,但它不起作用。同样的代码在Linux或任何Unix基础系统中运行良好,这将在Windows上产生影响(或任何选择Python 3中的
'spawn'
启动方法的系统),但在使用
fork
的系统上,这只是一个好主意,不是必需的。不清楚OP在使用什么,但如果这是问题的话,我希望它会以其他方式爆炸。试过这个。没有什么变化。在GoogleColab中工作如预期。