2012-07-17 19 views
0

我正在使用下面的代码来并行处理numpy数组。目标函数在这种情况下对输入数据执行简单的线性拉伸。该数组被分段,然后以大块的形式馈入池中。由于python文章的大量并行处理,这非常有效。multiprocessing.Process - 作为函数的变量

 pool = [multiprocessing.Process(target=linear_stretch, args= (shared_arr,slice(i, i+step), 35, 200, 2.0)) for i in range (0, y, step)] 

我的问题是,是否有可能做一些这样的:

stretch = Linear.linear_stretch() 

我在哪里创建函数的对象(!请纠正我的翻译),然后调用它的多。处理。

该功能驻留在目前的模块看起来像:

Linear.py 

import numpy 

def linear_stretch(args): 
    #Do some stuff 

回答

3

是的,是这样的:

stretch = Linear.linear_stretch 

在Python,功能已经第一类对象,并且能够被操纵像任何其他对象一样,或通过引用传递给另一个变量。注意一个函数或方法后括号信号解释调用函数,并传递返回值,这是为什么:如预期

stretch = Linear.linear_stretch() 

将无法​​正常工作。

+3

+1。但是,根据...很难解释的东西(请参阅多处理对pickle协议的扩展),您可能会或可能无法将函数传递给子进程。试试看,如果不起作用,请回来寻求更多帮助。 – abarnert 2012-07-17 00:28:47

+0

工作出色。不知道为什么我没有测试/阅读文档...谢谢! – Jzl5325 2012-07-17 03:24:33