У меня есть настройка, при которой я посылаю словарь через multiprocessing.queue
и делаю с ним что-то еще. Я получал странную ошибку «размер словаря изменился во время итерации по нему», когда я ничего не менял в словаре. Вот обратная связь, хотя это не очень полезно:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/queues.py", line 242, in _feed
send(obj)
RuntimeError: dictionary changed size during iteration
Поэтому я попытался изменить словарь на неизменный словарь , чтобы увидеть, где он изменяется. Вот след, который я получил:
Traceback (most recent call last):
File "/home/jason/src/interface_dev/jiva_interface/jiva_interface/delta.py", line 54, in main
msg = self.recv()
File "/home/jason/src/interface_dev/jiva_interface/jiva_interface/process/__init__.py", line 65, in recv
return self.inqueue.get(timeout=timeout)
File "/usr/lib/python2.6/multiprocessing/queues.py", line 91, in get
res = self._recv()
File "build/bdist.linux-i686/egg/pysistence/persistent_dict.py", line 22, in not_implemented_method
raise NotImplementedError, 'Cannot set values in a PDict'
NotImplementedError: Cannot set values in a PDict
Это немного странно, потому что, насколько я могу судить, я не делаю ничего, кроме как получить это из очереди. Может ли кто-нибудь пролить свет на то, что здесь происходит?