Python concurrent.futures ProcessPoolExecutor для создания нескольких. json -файлов - PullRequest
0 голосов
/ 04 февраля 2020

У меня проблема с созданием. json -файлов через функцию, а также с многопроцессорной обработкой через модуль concurrent.futures в Python.

Мой код выглядит так:

import json, concurrent.futures

iterable_list = [string1, string2, string3, string4, ...]

def lovely_function(arg):
    with open(string1+'.json', 'w') as write_file:
        print('opening',string1,'.json file.')            

        ...loop through stuff and create a dictionary...

        print('closing',string1,'.json file.')
        json.dump(dictionary,write_file)

with concurrent.futures.ProcessPoolExecutor() as executor:
    executor.map(lovely_function, iterable_list)

Когда я запускаю скрипт в своей консоли (Ubuntu 16.something), он печатает «открытие. json» - часть для каждого элемента в моем iterable_list, но выводит только одно «закрытие. json» , Тем не менее, все. json -файлы создаются и выгружаются в мою целевую папку, но только один (тот, что с закрывающим оператором) содержит данные. Иногда я вообще не получаю "закрытия. json".

Я дважды проверил свою функцию, и она работает правильно, если вы кормите ее вручную (например, lovely_function (string1) )

Что я делаю не так? Любые советы или подсказки? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 05 февраля 2020

Кажется, что Django ORM (который является частью моего перетасовки данных в рамках функции) не очень хорошо работает вместе с многопроцессорностью. Если вы смотрите на разные посты, это всегда касается обмена / открытия соединений. Я посмотрю дальше.

...