我正在尝试使用并行 Python 做一些非常简单的事情。我希望能够从一个类中创建一个对象,该类是我在另一个方法中创建的,该类用于并行执行一项工作。 这是我想让它工作的基本示例:
import pp
class TestClass(object):
def __init__(self):
pass
def doSomething (self, number) :
print number**2
class PPTask (object) :
def __init__ (self) :
pass
def ppTask(self, number = 1) :
sum = 0
sum += number
tc = TestClass()
tc.doSomething(sum)
return sum
if __name__ == '__main__' :
job_server = pp.Server()
job_list = []
results = []
for i in xrange(10) :
pt = PPTask()
job_list.append(job_server.submit(pt.ppTask, (1,), globals = globals()))
for job in job_list :
results.append(job())
for result in results :
print result
这会引发 NameError: global name 'TestClass' is not defined 并且我没有找到任何解决方案来传递它或在 ppTask 方法中重用它。
如有任何帮助,我们将不胜感激。
提前致谢
请您参考如下方法:
一个解决方案是告诉作业服务器为您提交的每个作业导入源模块本身。例如,如果您上面的脚本名为 pptest.py,您可以像这样创建作业:
job_list.append(job_server.submit(pt.ppTask, (1,), modules=('pptest',)))
在 ppTask 中,您可以像这样实例化 TestClass:
tc = pptest.TestClass()
总的来说,代码应该是这样的:
import pp
class TestClass(object):
def __init__(self):
pass
def doSomething (self, number) :
print number**2
class PPTask (object) :
def __init__ (self) :
pass
def ppTask(self, number = 1) :
sum = 0
sum += number
tc = pptest.TestClass()
tc.doSomething(sum)
return sum
if __name__ == '__main__' :
job_server = pp.Server()
job_list = []
results = []
for i in xrange(10) :
pt = PPTask()
job_list.append(job_server.submit(pt.ppTask, (1,), modules=('pptest',)))
for job in job_list :
results.append(job())
for result in results :
print result
