Python Can';t使用多处理同时调用多个函数

Python Can';t使用多处理同时调用多个函数,python,multiprocessing,Python,Multiprocessing,我试图弄明白如何在同一时间内多次运行同一个函数。我可以实现基于其他SO问题的多处理,但不幸的是,它并没有像我所希望的那个样工作。实际上,当我运行它时,我会得到如下结果(函数在每个osther之后运行): 我想实现这一点(或类似的目标): 我对Python非常陌生,因此可能犯了一些小错误,但不幸的是,我无法找出问题所在,因此如果有人能为我提供正确的解决方案,我将不胜感激 import multiprocessing def worker(): print ("Worker1")

我试图弄明白如何在同一时间内多次运行同一个函数。我可以实现基于其他SO问题的多处理,但不幸的是,它并没有像我所希望的那个样工作。实际上,当我运行它时,我会得到如下结果(函数在每个osther之后运行):

我想实现这一点(或类似的目标):

我对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)

对我有用。您可能没有足够的可用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)