繁体   English   中英

多重处理未在 python 3 中正确执行 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM