【问题标题】:Understanding python Multiprocessing using a simple example [duplicate]用一个简单的例子理解python多处理[重复]
【发布时间】:2017-06-16 11:06:35
【问题描述】:

我是多处理的新手。 我写了一个简单的代码,一次输入一个数字并打印出来。

import multiprocessing as mp

def test(num):
    print num

L = [1,2,3,4,5,6,7,8]


pool = mp.Pool(2)
pool.map(test,L)

这也可以使用普通方法完成[test(i) for i in L]

但我想使用多处理并执行此操作。 但是当我运行程序时,内核显示忙,但没有打印。

我的代码有问题吗?

【问题讨论】:

  • 你在用windows吗?
  • @IljaEverilä 是的
  • 你有一个无限循环,因为多处理试图产生新进程,试图从你的模块中导入测试函数,这会导致一组新的进程产生并且......你需要用if __name__ == "__main__": ... 保护实际的“主要”代码以防止这种情况发生。在支持 fork 的系统上,例如 linux,这不会发生,因为它们只是当场 fork 并调用函数。
  • @IljaEverilä 我没听懂你吗?你的意思是 import test ,但我在哪里保存 test.py ?
  • 在 if 语句中移动除函数测试之外的所有内容,以确保当某人或某物试图导入函数测试时,不会运行受保护的代码。多处理在 Windows 上的工作方式是它会产生全新的进程,这些进程会导入您的函数以完成工作。 if 块中的代码应该只在你的模块是主模块时运行。

标签: python multiprocessing


【解决方案1】:

当我在终端(Python2.7.6)中运行您的代码并打印时

1
3
2
4
5
6
7
8
[None, None, None, None, None, None, None, None]

【讨论】:

  • 投反对票,因为与“它对我有用”相结合的文档链接是一个糟糕的答案。
  • @IljaEverilä 是的,它在 Windows 中不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多