Вставка объектов в Multiprocessing Manager, dict - PullRequest
0 голосов
/ 10 июня 2019

У меня есть следующий код в test.py:

manager = multiprocessing.Manager()
cache = manager.dict()

class Test:
    def __init__(self):
        pass

Если я пытаюсь вставить объекты в кэш в другом файле, например,

from test import *
cache[1] = 1 #this works
cache[2] = Test() #this fails/hangs

Почему второй случайсбой / повесить?Можно ли вставить объекты в manager.dict ()?

Редактировать: Висит в Linux, но работает в Windows.Python 3.7.3

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Я думаю, что Manager нужно сначала start () редактировать (или "вводить" через with), т.е. код установки элемента ожидает ответа от связанного процесса сервера, но никогда не получаетответ и отсюда зависает.В любом случае, под Linux, и я держусь подальше от Windows, поэтому не хотел бы комментировать этот случай.

Тривиальное исправление для вашего опубликованного кода:

from test import manager, cache, Test
with manager:
    cache[1] = 1
    cache[2] = Test()

(используйтеиз import * обычно не рекомендуется)

Но я думаю, что вы, вероятно, хотите сделать больше, поэтому исправление будет более сложным.

0 голосов
/ 10 июня 2019

Обновите ваш manager.dict () обычным диктом.

tests = {}
test = test()
tests[test.name] = test
# insert other tests in the normal dictionary

obj = multiprocessing.Manager()
obj_tests = obj.dict()
obj_tests.update(tests)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...