无法使用多处理同时调用多个函数
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)
我想弄明白我怎么能在同一时间 运行 多次执行相同的功能。我可以使用基于其他 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)