Работники Python случайно застреваютPython

Программы на Python
Anonymous
Работники Python случайно застревают

Сообщение Anonymous »

Я столкнулся с проблемой в сценарии многопроцессорной обработки на Python. Скрипт обрабатывает рейсы с помощью функцииprocess_one_flight . По отдельности каждый шаг функции работает так, как ожидалось, но при выполнении через многопроцессорные рабочие процессы сценарий иногда зависает на случайных шагах функцииprocess_one_flight. Мне не удалось воспроизвести ошибку последовательным образом, что усложняет устранение неполадок.
Вот упрощенная версия сценария:

Код: Выделить всё

def _worker(q: Queue, unprocessed: list):
while not q.empty():
flight = q.get()
try:
process_one_flight(flight, pair=pair, baseline=baseline, force=force)
except Exception as e:
unprocessed.append(flight)
print(f"Error processing {flight}: {e}")

manager = Manager()
q = manager.Queue()
unprocessed = manager.list()

for world in db_path.iterdir():
if "flight" not in world.name or world_name not in world.name:
continue
for split in world.iterdir():
flight_list = list(split.iterdir())
flight_idx = [int(flight.name) for flight in flight_list]
sorted_idx = np.argsort(flight_idx)
sorted_flights = [flight_list[i] for i in sorted_idx]
for flight in sorted_flights:
print(flight)
flight = Flight_lw(world=world.name, split=split.name, flight_name=flight.name)
flight.add_db_path(db_path)
flight.build_folders()
q.put(flight)

if num_workers > 1:
workers = [Process(target=_worker, args=(q, unprocessed)) for _ in range(num_workers)]
for worker in workers:
worker.start()
for worker in workers:
worker.join()
else:
_worker(q, unprocessed)
Есть идеи, что происходит или как воспроизвести ошибку?

Подробнее здесь: https://stackoverflow.com/questions/786 ... k-randomly

Вернуться в «Python»