Python Can';t使用多处理同时调用多个函数
我试图弄明白如何在同一时间内多次运行同一个函数。我可以实现基于其他SO问题的多处理,但不幸的是,它并没有像我所希望的那个样工作。实际上,当我运行它时,我会得到如下结果(函数在每个osther之后运行): 我想实现这一点(或类似的目标): 我对Python非常陌生,因此可能犯了一些小错误,但不幸的是,我无法找出问题所在,因此如果有人能为我提供正确的解决方案,我将不胜感激Python Can';t使用多处理同时调用多个函数,python,multiprocessing,Python,Multiprocessing,我试图弄明白如何在同一时间内多次运行同一个函数。我可以实现基于其他SO问题的多处理,但不幸的是,它并没有像我所希望的那个样工作。实际上,当我运行它时,我会得到如下结果(函数在每个osther之后运行): 我想实现这一点(或类似的目标): 我对Python非常陌生,因此可能犯了一些小错误,但不幸的是,我无法找出问题所在,因此如果有人能为我提供正确的解决方案,我将不胜感激 import multiprocessing def worker(): print ("Worker1")
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)
对我有用。您可能没有足够的可用CPU/内核,或者您的进程运行得太快,以至于启动第二个作业需要足够长的时间才能完成第一个作业。您可以通过将
time.sleep(2)
作为doSomething(x)
的第一行来测试第二个前提。
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()
def doSomething (x):
time.sleep(.01)
for num in range(3):
print (num, x)