2015-06-28 3 views
0

Я написал код, который что-то вроде этого:Как я могу решить проблему python-parallel?

import time 
import pp 

class gener(object): 
    def __init__(self, n): 
     self.n = n 

    def __call__(self): 
     return self  

    def __iter__(self): 
     n = self.n 
     for i in range(n): 
      time.sleep(2) 
      yield i 

def gen(): 
    return gener(3) 

job_server = pp.Server(4) 
job = job_server.submit(
         gen, 
         args=(), 
         depfuncs=("gener",), 
         modules=("time",), 
         ) 

print job() 

следующего @zilupe полезного комментария я получил следующий вывод:

<__main__.gener object at 0x7f862dc18a90> 

Как я могу вставить class gener итерации к параллельной?

Я хотел бы запустить его параллельно с другими функциями. Мне нужен этот генератор, как класс, потому что я хочу заменить другой код из модуля довольно сложного программного пакета, и было бы сложно реорганизовать этот код.

Я пробовал много чего без успеха. Я провел довольно тщательное расследование на этом сайте, но я не смог найти подходящий ответ, подходящий для меня. Кто-нибудь, любая помощь? Спасибо.

Сложение:

Согласно @zilupe полезные комментарии дополнительную информацию:

Основной целью является распараллеливание итерации внутри class gener:

def __iter__(self): 
     n = self.n 
     for i in range(n): 
      time.sleep(2) 
      yield i 

Я только созданный из gen() потому что я не мог понять, как я могу использовать его непосредственно в parallel.submit().

ответ

2

Это не ответ на ваш вопрос, но вы получите ошибку, потому что depfuncs должен быть кортеж функций, а не строк - строка должна быть: depfuncs=(gener,),

Вы понимаете, что функция gen только создавая экземпляр gener и на самом деле не называет его?

Что вы пытаетесь расслоить здесь - создание генератора или итерации по генератору? Если это итерация, вероятно, вы должны создать генератор первых, передать его gen в аргументах, а затем в gen итерации над ним:

def gen(g): 
    for _ in g: 
     pass 

job_server.submit(gen,args=(gener(3),),...) 
+0

Спасибо большое, возможно, это из-за битовой усталостью, однако, как вы упомянули это еще не ответ на мою проблему. Еще раз спасибо :) – Geeocode

+0

Трудно сказать, что цель 'gener', но я обновил ответ с другой проверкой. – jbasko

+0

Хорошая точка! Я бы хотел запустить параллельную итерацию, а не создание генератора. На самом деле цель gen только избегать «AttributeError: type object« gener »не имеет сообщения об ошибке« func_name ». Не могли бы вы, пожалуйста, дать мне какое-то решение, как я могу использовать общий класс непосредственно для распараллеливания итерации? – Geeocode

Смежные вопросы