[英]Multuiprocessing not executing a function properly in python 3
当使用 .start .start()
方法执行 function 时,function 无法按我的预期工作。 我可以看到time.sleep()
行有效,但是更改变量和 print 语句可以。 这些函数在调用.run()
方法时执行,但这会将代码与其他函数串联运行,而不是多处理。
from multiprocessing import Process
import time
import sys
worker1 = None
worker2 = None
def worker():
time.sleep(60)
worker1 = 6
print("hello")
sys.stdout.flush()
def workertwo():
time.sleep(60)
worker2 = 6
print("world")
sys.stdout.flush()
if __name__ == '__main__':
hello = Process(target=worker)
world = Process(target=workertwo)
world.start()
hello.start()
world.join()
hello.join()
print(worker1)
print(worker2)
这只是一段测试代码,它与更大的软件共享问题。 我在 windows 10 机器上运行,运行 python 3.6.8
当我运行此代码时,我得到:
None
None
>>>
但我希望得到:
hello
world
6
6
>>>
它是从脚本文件运行的,但在从命令提示符内部运行时确实有效。 它将与 tkinter GUI 一起运行,因此需要从脚本运行(我假设)
这是我在这里的第一个问题,我是自学的。 任何指导都会有所帮助,
谢谢丹尼
您试图在多个进程之间共享一个全局变量,这显然是行不通的。 在进程之间共享 memory 中的变量的可能选项如下所述: https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-process
from multiprocessing import Process, Value
import time
import sys
worker1 = Value('i', 0)
worker2 = Value('i', 0)
def worker(worker1):
time.sleep(3)
worker1.value = 6
print("hello")
sys.stdout.flush()
def workertwo(worker2):
time.sleep(3)
worker2.value = 6
print("world")
sys.stdout.flush()
if __name__ == '__main__':
hello = Process(target=worker, args=(worker1,))
world = Process(target=workertwo, args=(worker2,))
world.start()
hello.start()
world.join()
hello.join()
print(worker1.value)
print(worker2.value)
出去:
world
hello
6
6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.