我试图弄清楚如何在同一时间多次运行相同的函数。我可以使用基于其他问题的多处理来实现一些东西,但不幸的是它不能按我想要的方式工作。实际上,当我运行它时,我得到类似这样的东西(函数在每个其他函数之后运行):
Worker1
0 1
1 1
2 1
Worker2
0 2
1 2
2 2
Worker3
0 3
1 3
2 3
我想实现这个(或类似的事情):
Worker1
Worker2
Worker3
0 1
0 2
0 3
1 1
1 2
1 3
2 1
2 2
2 3
我对Python真的很陌生,所以可能犯了一些小错误,但不幸的是我无法弄清楚问题出在哪里,所以如果有人能向我展示正确的解决方案,我将非常感激。
import multiprocessing
def worker():
print ("Worker1")
doSomething(1)
return
def worker2():
print ("Worker2")
doSomething(2)
return
def worker3():
print ("Worker3")
doSomething(3)
return
def doSomething (x):
for num in range(3):
print (num, x)
def runInParallel(*fns):
proc = []
for fn in fns:
p = multiprocessing.Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
if __name__ == '__main__':
runInParallel(worker, worker2, worker3)
# 2. ATTEMPT - it does the same
if __name__ == '__main__':
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
p2 = multiprocessing.Process(target=worker2)
jobs.append(p2)
p2.start()
p3 = multiprocessing.Process(target=worker3)
jobs.append(p3)
p3.start()
发生的情况是,后台线程甚至在程序可以创建并启动下一个线程之前就已完成,因此这就是您将每个工作人员分开的原因。以获得您想要的输出。您可以添加睡眠,就像 Evert 提到的那样:
def doSomething (x):
time.sleep(.01)
for num in range(3):
print (num, x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)