【发布时间】: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 块中的代码应该只在你的模块是主模块时运行。