【问题标题】:How does the python multiprocessing works in backend?python 多处理如何在后端工作?
【发布时间】:2016-05-23 15:09:45
【问题描述】:

当我尝试运行代码时:

import multiprocessing

def worker():
    """worker function"""
    print 'Worker'
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()

输出是空白的,只是在不打印“Worker”的情况下执行。如何在多处理中打印所需的输出?
使用多处理时实际发生了什么?
我们可以用于多处理的最大内核数是多少?

【问题讨论】:

  • 在我的电脑上,您的测试打印了五次“worker”。您使用的是什么操作系统?
  • 您是作为脚本运行的,还是以交互模式运行的?如果您在启动所有进程后join 会发生什么?
  • 我使用的是 windows-10 和 python 2.7.9
  • ...交互模式?..

标签: python python-2.7 process parallel-processing multiprocessing


【解决方案1】:

我已经在 Windows 7、Cygwin 和 Ubuntu 中尝试过您的代码。对我来说,所有线程都在循环结束之前完成,所以我可以显示所有打印,但使用 join() 将保证所有线程都会完成。

import multiprocessing

def worker():
    """worker function"""
    print 'Worker'
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()

    for i in range(len(jobs)):
        jobs.pop().join()

至于multiprocessing 在后端的工作方式,我会让比我更有经验的人来回答这个问题:) 我可能只会自欺欺人。

【讨论】:

  • join 不是必需的,除非您使子进程成为守护进程。 multiprocessing 将在主脚本退出时加入非守护进程。
  • 是的,您完全正确,join 不是必需的,但原始代码对我和其他人都有效,所以也许 Win10 对进程做了一些奇怪的事情。我的“答案”更多的是评论:)
  • @robyschek 我在文档中没有看到这一点,这总是保证是真的吗?
  • @BiRico 好吧,The doc 声明 Remember also that non-daemonic processes will be joined automatically。但是,它在指南部分中执行。但对我来说它总是有效的,所以我认为它有完整的文档。
【解决方案2】:

我为我打印了 5 次“工人”,你在 Python 3 上吗?如果是这种情况,您必须使用print("Worker")。从我的实验来看,我认为多线程并不意味着使用多个内核,它只是交替运行不同的线程以确保并行性。尝试阅读多处理库文档以获取更多信息。

【讨论】:

  • 我使用的是 python 2.7.9,我提到了多处理而不是多线程。在多处理文档中,给出了如何使用模块,但没有给出它在后端的工作方式
  • 它可能会通知您stackoverflow.com/questions/3044580/… 我不确定您为什么不打印。
  • 我尝试了比我的核心数量更多的东西,不出所料,它再次打印得很好
  • 即使我在 Python 3 中尝试过,也没有打印输出,而是我得到了 RESTART: C:/Users/les/AppData/Local/Programs/Python/Python35-32/dinesh/test-1.py
猜你喜欢
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 2022-01-23
  • 2014-07-01
相关资源
最近更新 更多