LINUX.ORG.RU

Что использовать для оперативной передачи данных между процессами в python?

 , , , ,


1

1

multiprocessing.Queue вообще умеет в оперативность? или ЯЧДНТ?

Первый поток процесс пишет в очередь, а второй сразу после этого - не видит в очереди ничего. Это норма?

Придется использоваться БД?

А ведь нужно лишь хранить id строк таблицы, которые нужно исключить из запроса, т.к. этот процесс уже начал с ними работать.

★★★★★

Последнее исправление: bvn13 (всего исправлений: 1)

Ответ на: комментарий от anonymous

как мне получить все элементы очереди в массив? в доках сказано - get из очереди в цикле. а это - очистка очереди. следовательно, нужно воссоздать. от этого и lock

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от deadNightTiger

как его юзать правильно?

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от bvn13

как мне получить все элементы очереди в массив? в доках сказано - get из очереди в цикле.

Ага.

следовательно, нужно воссоздать

Кого и зачем нужно воссоздать?

Моя чует, тебе нужно выспаться и shared memory. Но вначале выспаться.

anonymous
()
Ответ на: комментарий от anonymous

что он хочет?

Process SendMailWorker-3:
Traceback (most recent call last):
  File "C:\python\lib\multiprocessing\managers.py", line 749, in _callmethod
    conn = self._tls.connection
AttributeError: 'ForkAwareLocal' object has no attribute 'connection'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\python\lib\multiprocessing\process.py", line 249, in _bootstrap
    self.run()
  File "C:\dev\my\mailsender\src\MailSender\Engine\Worker.py", line 33, in run
    self.work()
  File "C:\dev\my\mailsender\src\MailSender\Engine\Workers\SendMailWorker.py", line 91, in work
    TaskListEntry.id.notin_(ids) if (len(ids) > 0) else True
  File "<string>", line 2, in __len__
  File "C:\python\lib\multiprocessing\managers.py", line 753, in _callmethod
    self._connect()
  File "C:\python\lib\multiprocessing\managers.py", line 740, in _connect
    conn = self._Client(self._token.address, authkey=self._authkey)
  File "C:\python\lib\multiprocessing\connection.py", line 485, in Client
    c = PipeClient(address)
  File "C:\python\lib\multiprocessing\connection.py", line 686, in PipeClient
    _winapi.WaitNamedPipe(address, 1000)
FileNotFoundError: [WinError 2] Не удается найти указанный файл
bvn13 ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Так, похоже, разобрался. В моем классе-менеджере всех воркеров я создаю multiprocessing.Manager(), от которого - dict() (анонимус, это и есть shared memory?). После я стартовал всех воркеров, но не делал join(). Пишут, что в такой ситуации этот процесс завершается, закрыв соединение Manager-а, поэтому такая ошибка и возникает на стороне воркеров. Сделал

for w in self.workers :
   w.join()
и, кажется, все заработало

bvn13 ★★★★★
() автор топика

Хотел предложить сервер поверх удс использовать (ибо оверхед минимален, компоненты из коробки, расширяемость на будущее), но винда жеж)

genryRar ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.