Многопроцессорные элементы в списке - Python. Чтобы избежать конфликтов, потребуется ли использование очереди? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть список из 18k идентификаторов, и я хочу выполнить 3 функции, то есть

  1. fetch_data_from_db (),
  2. data_clean (),
  3. push_data_back_to_db ()

Для каждой из 18k записей я хочу выполнить 1,2 последовательно и выгрузить вывод в файлы. 3. может быть запущен на более позднем этапе.

Чтобы сделать это быстрее, я пытаюсь выполнить многопроцессорную обработку, написав функцию-оболочку вокруг (1,2) с использованием библиотеки пула.

from multiprocessing import pool
import time
list_of_18k = [1,2,3,4,5....]

def func(id):
   fetch_data_from_db(id)
   data_clean(id)

if __name__ == '__main__':
  p = pool.Pool()
  res = p.map(func, list_of_18k)

  p.close()
  p.join()

Вопрос в том, если мы просто запустим его таким образом, будет ли он автоматически распространять список из 18k идентификаторов для каждого из процессов (ядер), и ни один процесс не будет читать элемент списка дважды ?? или необходимо использовать блокировки перед list_of_18k = [] или добавить некоторую очередь / канал ??

...