Skip to main content
 首页 » 编程设计

python之并行 Python之在并行执行中将对象创建到另一个类中

2025年05月04日12sharpest

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