【问题标题】:Multuiprocessing not executing a function properly in python 3多处理未在 python 3 中正确执行函数
【发布时间】:2025-12-16 00:20:07
【问题描述】:

当使用.start() 方法执行函数时,函数没有按我预期的那样工作。我可以看到time.sleep() 行,但是更改变量和打印语句可以。这些函数在调用.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 一起运行,因此需要从脚本运行(我假设)

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

谢谢丹尼

【问题讨论】:

  • 究竟是什么不工作?请注意,您在这里的赋值语句只是创建局部变量,在函数终止后不再存在,并且与同名的全局变量没有任何联系......一般来说,当提出问题时,不要我们猜。说“它不起作用”不是一个充分的问题描述什么不起作用以及如何起作用?
  • 它的模块的 .start() 函数我认为不起作用,工作函数只有时间线运行,而更改变量的行和打印语句不' t 运行,我进入 shell 的唯一打印输出是 None 和 None

标签: python multiprocessing process.start


【解决方案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)

输出:

world
hello
6
6

【讨论】:

  • 感谢您的回复,我刚刚复制并粘贴了您的代码并在我的机器上运行它,并且刚刚将 6 和 6 打印到 shell,但是 hello 和 world 打印语句仍然没有不。请你能告诉我你运行的是什么 python 视觉,谢谢
  • 您是否有机会在笔记本中运行此代码?如果是,那么这是 IPython 运行时的预期行为。要获得与我得到的结果相同的结果,您需要在常规 python 下运行它。我的python版本是3.6
  • 我在定制的 PC 上运行 python 3.6