import time
from multiprocessing import Process
start = time.perf_counter()
def sleep():
print('Sleeping 1 second(s)...')
time.sleep(1)
return 'Done Sleeping...'
p1 = Process(target = sleep)
p2 = Process(target = sleep)
p1.start()
p2.start()
p1.join()
p2.join()
finish = time.perf_counter()
print(f'Finished in {round(finish-start, 2)} second(s)')
输出:
Finished in 0.17 second(s)
我尝试使用多处理,但是当我运行代码时,它在 0.17~ 秒内结束,而不是应有的 1,它根本没有触发函数......
如果我像这样放括号:
p1 = Process(target = sleep())
p2 = Process(target = sleep())
输出:
Sleeping 1 second(s)...
Sleeping 1 second(s)...
Finished in 2.35 second(s)
视窗 10. Python 3.7.4 谢谢:(
我已经解决了这个问题,为了使您的代码正常工作,您应该添加 if__name__ == '__main__'
.你的两个新进程都需要访问你的def sleep((才能做到这一点,你必须通过__name__ == "__main__"
来分离代码的"可执行"部分,或者将def sleep((放在另一个文件中,然后从文件名导入睡眠中导出它
import time
from multiprocessing import Process
start = time.perf_counter()
def sleep():
print('Sleeping 1 second(s)...')
time.sleep(1)
return 'Done Sleeping...'
if __name__ == "__main__":
p1 = Process(target = sleep)
p2 = Process(target = sleep)
p1.start()
p2.start()
p1.join()
p2.join()
finish = time.perf_counter()
print(f'Finished in {round(finish-start, 2)} second(s)')
希望答案对您有用。
网站表单手册"The Python 3 Standard Libaray by Example"作者:Doug Hellmann:
线程和多处理示例之间的一个区别是额外的保护
__main__
包含在多处理示例中。由于新流程的方式 启动时,子进程需要能够导入包含目标函数的脚本。 将应用程序的主要部分包装在检查__main__
中可确保它这样做 导入模块时,不会在每个子项中递归运行。另一种方法是导入 来自单独脚本的目标函数。例如,multiprocessing_import_main.py 使用在第二个模块中定义的工作器函数。