如何在 Python 中使用多处理对吗?


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 使用在第二个模块中定义的工作器函数。

相关内容

  • 没有找到相关文章