我正在尝试用并行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