Совместное использование объекта (экземпляр класса) в python с помощью Менеджеров

Мне нужно разделить объект и его методы между несколькими процессами в python. Я пытаюсь использовать Managers (в модульной многопроцессорности), но он сбой. Вот глупый пример производителя-потребителя, где общий объект между двумя процессами – это всего лишь список чисел с четырьмя методами.

from multiprocessing import Process, Condition, Lock from multiprocessing.managers import BaseManager import time, os lock = Lock() waitC = Condition(lock) waitP = Condition(lock) class numeri(object): def __init__(self): self.nl = [] def getLen(self): return len(self.nl) def stampa(self): print self.nl def appendi(self, x): self.nl.append(x) def svuota(self): for i in range(len(self.nl)): del self.nl[0] class numManager(BaseManager): pass numManager.register('numeri', numeri, exposed = ['getLen', 'appendi', 'svuota', 'stampa']) def consume(waitC, waitP, listaNumeri): lock.acquire() if (listaNumeri.getLen() == 0): waitC.wait() listaNumeri.stampa() listaNumeri.svuota() waitP.notify() lock.release() def produce(waitC, waitP, listaNumeri): lock.acquire() if (listaNumeri.getLen() > 0): waitP.wait() for i in range(10): listaNumeri.appendi(i) waitC.notify() lock.release() def main(): mymanager = numManager() mymanager.start() listaNumeri = mymanager.numeri() producer = Process(target = produce, args =(waitC, waitP, listaNumeri,)) producer.start() time.sleep(2) consumer = Process(target = consume, args =(waitC, waitP, listaNumeri,)) consumer.start() main() 

Так или иначе, это всегда сбой, говоря мне следующее:

 Process Process-3: Traceback (most recent call last): File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap self.run() File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run self._target(*self._args, **self._kwargs) File "./trySemProc.py", line 61, in consume if (listaNumeri.getLen() == 0): File "<string>", line 2, in getLen File "/usr/lib/python2.7/multiprocessing/managers.py", line 755, in _callmethod self._connect() File "/usr/lib/python2.7/multiprocessing/managers.py", line 742, in _connect conn = self._Client(self._token.address, authkey=self._authkey) File "/usr/lib/python2.7/multiprocessing/connection.py", line 169, in Client c = SocketClient(address) File "/usr/lib/python2.7/multiprocessing/connection.py", line 293, in SocketClient s.connect(address) File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) error: [Errno 2] No such file or directory 

Так в чем дело? Как использовать этих менеджеров для совместного использования объектов и их методов?

  • Сельдерей. Уменьшить количество процессов
  • Разделить строку на каждый n-й символ?
  • Преобразование строки в существующие имена переменных
  • Python readline () из строки?
  • TypeError: ожидается, что объект буфера символов
  • Словарь с однократной записью?
  • Как сделать «ударить любой ключ» в python?
  • Как применяются правила лечения с помощью лучевой терапии?
  • One Solution collect form web for “Совместное использование объекта (экземпляр класса) в python с помощью Менеджеров”

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

      consumer.join() producer.join() 

    после того, как вы вызвали методы start() ваших процессов.

    Python - лучший язык программирования в мире.