python - 如何安排一对不同的功能,以便真正并行运行?
问题描述
我想并行执行两个函数,并想验证它们是否并行运行。在这里我并行运行 2 个函数,但我得到的输出不同。理想情况下,它们应该同时完成
我使用的是 Windows 10 操作系统,因此无法使用 Ray。甚至不能使用池,因为我使用的功能会有所不同
代码:
import datetime
from multiprocessing import Process
import os
import datetime
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid())
print('process id:', os.getpid())
def f(name):
info('function f')
print('hello', name)
def func1():
for i in range(1):
print('function 1 running')
for j in range(10000):
for k in range(10000):
a=1
print(datetime.datetime.now())
return
def func2():
for i in range(1):
print('function 2 running')
for j in range(10000):
for k in range(10000):
a=1
print(datetime.datetime.now())
return
if __name__ == '__main__':
info('main line')
p1 = Process(target=func1())
p1.start()
p2 = Process(target=func2())
p2.start()
输出:
main line
module name: __main__
parent process: 17284
process id: 2372
function 1 running
2019-07-07 12:00:44.512577
function 2 running
2019-07-07 12:00:50.100357
预期输出:
function 1 running
function 2 running
2019-07-07 12:00:44.512577
2019-07-07 12:00:44.512577
解决方案
你写了
p1 = Process(target=func1())
p1.start()
p2 = Process(target=func2())
p2.start()
它评估当前进程中的两个函数(顺序),并将None
结果作为target
参数传递。
相反,你想执行
p1 = Process(target=func1)
...
p2 = Process(target=func2)
它在不评估可调用对象的情况下传递可调用对象。
推荐阅读
- reactjs - 三元运算返回相同的结果而不评估条件
- javascript - 迭代数字数组以使用给定算法计算所有可能的组合 - javscript
- python - 如何装饰父属性的 getter 或 setter?
- android - W/FLTFireMsgService(8777):Flutter-FCM 无法在 Dart 中处理后台消息
- c - 创建过滤器 ffmpeg 过滤器时,我得到 ar: libavfilter/foobar.o: No such file or directory
- php - Laravel Paypal Api 和订阅计划集成。自学初学者的问题
- asp.net-core - 如何从 ASP.Net Core 5 (Razor) 中的中间件获取页面模型的类型?
- java - 在没有一堆 if 语句的情况下检查用户输入并委托给其他方法?
- javascript - 在 Chrome 设置页面中模拟点击
- php - 如何将访问我网站的人的 IP 保存到 logs.txt?