[使用.start()
方法执行功能时,该功能无法正常工作。我可以看到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一起运行,因此需要从脚本运行(我假设)
这是我的第一个问题,我是自学成才的。任何指导都会有所帮助,
感谢丹尼
您正在尝试在多个进程之间共享全局变量,这显然不起作用。此处介绍了在进程之间共享内存中变量的可能选项:https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes
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)
OUT:
world
hello
6
6