首页 > 解决方案 > Python multiprocessing is not calling function

问题描述

I am trying to understand how multiprocessing works in Python. Here is a simple code which is not calling the function as I expected it would.

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)')

In Jupyter Notebook, after executing I am getting following output:

Finished in 0.2 second(s)

I though it would be like something like this:

Sleep
Sleep
Wake up
Wake up
Finished in 0.2 second(s)

What am I missing?

标签: pythonpython-3.xjupyter-notebookmultiprocessing

解决方案


您应该检查“编程指南”(https://docs.python.org/3/library/multiprocessing.html#multiprocessing-programming)以找出您需要以下内容的原因:

if __name__ == '__main__' :

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


推荐阅读