【问题标题】:How to write multiprocessing code correctly in Python 2如何在 Python 2 中正确编写多处理代码
【发布时间】:2019-04-04 14:03:31
【问题描述】:

我正在尝试在 python 2.7 中实现非常简单的多处理代码,但看起来代码是串行而不是并行运行的。 以下代码打印 *****1***** 而我希望它在 *****1***** 之后立即打印 *****2*****。


import os
import multiprocessing
from time import sleep


def main():
    func1_proc = multiprocessing.Process(target=func1())
    func2_proc = multiprocessing.Process(target=func2())

    func1_proc.start()
    func2_proc.start()

    pass

def func1():
    print "*****1*****"
    sleep(100)

def func2():
    print "*****2*****"
    sleep(100)

if __name__ == "__main__":
    main()

【问题讨论】:

  • 两个衍生的进程独立运行,你为什么期望任何输出顺序?
  • 顺序不是问题,该代码只打印一行,而我预计是 2 行。

标签: python multiprocessing


【解决方案1】:

您在将func1func2 的返回值传递给Process 之前调用它们,因此func1 将在返回None 之前休眠100 秒,为此Process 将引发错误。

您应该将函数对象传递给Process,以便它将在单独的进程中运行它们:

func1_proc = multiprocessing.Process(target=func1)
func2_proc = multiprocessing.Process(target=func2)

【讨论】:

  • 请注意,在大多数系统上,这不会给出输出,因为默认情况下子进程中的打印不会通过管道传输到主进程的标准输出。
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多