У меня есть список из 18k идентификаторов, и я хочу выполнить 3 функции, то есть
- fetch_data_from_db (),
- data_clean (),
- 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 = [] или добавить некоторую очередь / канал ??