как использовать инициализатор для настройки многопроцессорного пула?

Я пытаюсь использовать многопроцессный объект Pool. d нравится, чтобы каждый процесс открывал соединение с базой данных при запуске, а затем использовал это соединение для обработки передаваемых данных. (Вместо того, чтобы открывать и закрывать соединение для каждого бита данных.) Это похоже на то, для чего инициализатор, но я не могу понять, как взаимодействуют обработчик и инициализатор, поэтому у меня есть что-то вроде этого:

def get_cursor():
  return psycopg2.connect(...).cursor()

def process_data(data):
   # here I'd like to have the cursor so that I can do things with the data

if __name__ == "__main__":
  pool = Pool(initializer=get_cursor, initargs=())
  pool.map(process_data, get_some_data_iterator())

как мне (или мне) вернуть курсор из get_cursor() в process_data()?

47
задан Chris Curvey 11 April 2012 в 16:40
поделиться