我有以下代码(Windows 64bit上的Python 3.7(:
from time import sleep
import time
from multiprocessing import Process
### function ###
def func(l):
for i in l:
sleep(1)
print (i)
t1 = time.time()
total = t1-t0
print ('time : ',total)
### main code ###
t0 = time.time()
l = list(range(1, 4))
if __name__ == '__main__':
p = Process(target=func, args=(l,))
p.start()
p.join()
sleep(10)
print ('done')
t1 = time.time()
total = t1-t0
print ('time : ',total)
目标是与代码的主要块并行运行函数。当我运行这个时,我会得到以下结果:
done
time : 10.000610828399658
1
time : 11.000777244567871
2
time : 12.001059532165527
3
time : 13.00185513496399
done
time : 23.11873483657837
但是我期望以下内容:
1
time: ~1
2
time: ~2
3
time: ~3
done
time: ~10
因此,从本质上讲,我希望该功能与主代码并行运行。我很困惑,因为如果不进行多处理,此代码最多应运行13秒,但它运行23秒。目标是在10秒内运行。
如何解决此问题以使其按预期工作?
我无法再现第一次打印为〜10的问题,当我尝试时,我从〜1开始,如所预期的。
我在父过程中的最后一次是〜13。这是因为p.join()
,它等待孩子的过程完成。如果我删除它,则在父母中打印的时间为〜10。
脚本:
from time import sleep
import time
from multiprocessing import Process
### function ###
def func(l):
for i in l:
sleep(1)
print (i)
t1 = time.time()
total = t1-t0
print ('time : ',total)
### main code ###
t0 = time.time()
l = list(range(1, 4))
if __name__ == '__main__':
p = Process(target=func, args=(l,))
p.start()
# p.join()
sleep(10)
print ('done')
t1 = time.time()
total = t1-t0
print ('time : ',total)
输出:
$ python testmultiproc.py
1
time : 1.0065689086914062
2
time : 2.0073459148406982
3
time : 3.0085067749023438
done
time : 10.008337020874023