无法使用多处理同时调用多个函数

Can't call multiple functions in the same time with multiprocessing

我想弄明白我怎么能在同一时间 运行 多次执行相同的功能。我可以使用基于其他 SO 问题的多处理来实现一些东西,但不幸的是它不能像我想要的那样工作。实际上,当我 运行 它时,我得到这样的东西(函数在每个 osther 之后 运行ning):

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)