Parallel Python - создавать объекты в другом классе в параллельном исполнении - PullRequest
2 голосов
/ 03 апреля 2012

Я пытаюсь сделать что-то довольно простое с Parallel 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.

Любая помощь будет очень ценна.

Заранее спасибо

1 Ответ

1 голос
/ 03 апреля 2012

Одним из решений будет указание серверу заданий импортировать сам исходный модуль для каждой отправляемой вами работы. Например, если ваш скрипт выше назывался 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
...