отложенная загрузка внутри multithread.pool.imap() происходит несколько раз вместо одного

#python #multithreading #python-2.7 #lazy-loading

#python #многопоточность #python-2.7 #отложенная загрузка

Вопрос:

Давайте предположим, что есть класс

 class Helper(object):
 @property  
 def lazy_prop(self):
   if not self.__model:
      self.__model = init()
 return self.__model
...
 

и у меня есть функция

 def action(data):
 #handle some  actions which using Helper
 

и у меня есть некоторые данные, которые необходимо обрабатывать с action помощью функции, подобной этой

 data = ['bla-bla', 'foo-foo']
pool = Pool()
pool.imap(action, data)
 

Проблема в том, что свойство lazy инициализируется много раз, а не один раз. Почему это происходит и как это исправить?

Ответ №1:

При multiprocessing этом, если вы создаете несколько заданий Helper.lazy_prop , они будут инициализированы в каждом Process .