Multuiprocessing无法在python 3中正确执行功能

问题描述 投票:0回答:1

[使用.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一起运行,因此需要从脚本运行(我假设)

这是我的第一个问题,我是自学成才的。任何指导都会有所帮助,

感谢丹尼

python multiprocessing process.start
1个回答
1
投票

您正在尝试在多个进程之间共享全局变量,这显然不起作用。此处介绍了在进程之间共享内存中变量的可能选项: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
© www.soinside.com 2019 - 2024. All rights reserved.