Код: Выделить всё
class IdIndex:
def __init__(self):
self.data = set()
self.call_count = 0
self.lock = multiprocessing.Lock()
def get_new_ones(self, ids):
with self.lock:
self.call_count += 1
new_ones = ids - self.data
self.data.update(new_ones)
return new_ones
class IndexManager(BaseManager):
pass
IndexManager.register("ids", IdIndex)
Код: Выделить всё
with IndexManager() as index:
# pass index.ids() proxies to subprocesses
Судя по тому, что я наблюдаю на основе подробного журналирования, это понимание неверно. self.call_count как бы увеличивается, но не последовательно. Похоже, что либо было несколько экземпляров IdIndex, либо что-то кэшировано в прокси-объектах. Но мне трудно понять, что происходит на самом деле. Если я зарегистрирую self.call_count, я получу что-то вроде 1,2,3,4,4,5,6,4,5,5,7,8,8,...
Может ли кто-нибудь объяснить, что не так с моим пониманием и как это настроить, чтобы у меня был только один экземпляр IdIndex?
Подробнее здесь: https://stackoverflow.com/questions/797 ... rnal-state