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)')
output:
Finished in 0.17 second(s)
我尝试使用多重处理,但是当我运行代码时,它在 0.17~ 秒内结束,而不是应有的 1 秒,它根本没有启动该功能......
如果我像这样加上括号:
p1 = Process(target = sleep())
p2 = Process(target = sleep())
output:
Sleeping 1 second(s)...
Sleeping 1 second(s)...
Finished in 2.35 second(s)
Windows 10.Python 3.7.4
谢谢你:)
我已经解决了这个问题,为了使您的代码正常工作,您应该添加 if__name__ == '__main__'
。您的两个新进程都需要访问您的 def sleep() 为了做到这一点,您必须通过以下方式分隔代码的“可执行”部分__name__ == "__main__"
或者将 def sleep() 放入另一个文件中并从那里导出 from filename import 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)')
希望答案对您有用。
Doug Hellmann 的网站形式书籍“Python 3 标准库示例”:
线程和多处理示例之间的一个区别是额外的保护
为了__main__
包含在多处理示例中。由于新流程的方式
启动后,子进程需要能够导入包含目标函数的脚本。
将应用程序的主要部分包装在检查中__main__
确保它确实如此
导入模块时,不会在每个子级中递归运行。另一种方法是导入
来自单独脚本的目标函数。例如,multiprocessing_import_main.py
使用第二个模块中定义的工作函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)