Я пытаюсь распараллелить операции записи в 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()