Многопроцессорная операция обновления в PyMon go зависает после ошибки AutoReconnect - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь распараллелить операции записи в MongoDb, используя библиотеку многопроцессорной обработки Python. У меня есть список файлов (около 500 КБ) и функция, которая выполняет некоторую обработку файла и записывает его в Mon go, используя update_one. Код работает некоторое время, но в конечном итоге он просто зависает после того, как каждый процесс получает ошибку AutoReconnect (я вижу это только после того, как использую прерывание клавиатуры).

Сообщение об ошибке c: Exec error resulting in state DEAD :: caused by :: errmsg: "interrupted at shutdown". Я бы хотел, чтобы каждый процесс перехватил эту ошибку (если она возникла), спал, а затем повторил попытку, но вместо этого каждый процесс запускает эту ошибку, и все они просто зависают там.

Любая помощь будет оценен, спасибо!

def some_processing(filename):
    client = MongoClient('connection_string')
    collection = client['collection_name']
    done = False

    for i in range(5):
        if done is False:
            try:
                # some processing code
                collection.update_one({'field1':'value', ...})
                done = True
            except pymongo.errors.AutoReconnect as e:
                print(str(e))
                time.sleep(pow(2,x))

pool = Pool(processes=16)
results = pool.map(some_processing, ls_files, chunksize=1000)
pool.close()
pool.join()
...