【发布时间】:2014-06-24 10:16:29
【问题描述】:
我正在使用 Parallel Python 模块 (pp),并希望将作业提交给工作人员。但是,我要执行的函数在另一个模块中(用 Cython 编写),我不知道如何将函数名称导入新的 worker。建议的方法here,即在函数内部导入模块“walkerc”无法正常工作,因为walk本身是在walkerc中定义的,文件名为“walkerc.so”
import pp
from walkerc import walk
# Other stuff here
ser = pp.Server()
# Some more definitions
ser.submit(walk, (it, params))
ser.submit(walk, (1000, params), modules = ("walkerc",), globals = globals())
上面的两个语句都失败了,我得到以下错误:
Traceback(最近一次调用最后一次):
文件“”,第 1 行,在 ser.submit(walk, (1000, params), modules = ("walkerc",), globals = globals())
文件“/usr/lib/python2.7/site-packages/pp.py”,第 458 行,在提交中 sfunc = self.__dumpsfunc((func, ) + depfuncs, 模块)
文件“/usr/lib/python2.7/site-packages/pp.py”,第 629 行,在 __dumpsfunc sources = [self.__get_source(func) for func in funcs]
文件“/usr/lib/python2.7/site-packages/pp.py”,第 696 行,在 __get_source sourcelines = inspect.getsourcelines(func)[0]
文件“/usr/lib/python2.7/inspect.py”,第 690 行,在 getsourcelines 中 行,lnum = findsource(object)
文件“/usr/lib/python2.7/inspect.py”,第 526 行,在 findsource 中 文件 = 获取文件(对象)
文件“/usr/lib/python2.7/inspect.py”,第 420 行,在 getfile '函数、回溯、框架或代码对象'.format(object))
TypeError: '' is not a module, class, method, 函数、回溯、框架或代码对象
函数 'walk' 本身在主程序中被正确导入,问题在于将其提交给新工作人员的过程。
如何正确指定函数名称“walk”? 我不想在我调用它的同一个文件中定义“walk”,因为我已经在 Cython 中对其进行了修改并希望获得更好的性能。有其他选择吗?
【问题讨论】:
标签: python parallel-processing parallel-python