При многопроцессорной обработке совместное использование очереди между родительским и дочерним процессами важно для связи и получения результатов. Однако использование apply_async для запуска асинхронных рабочих процессов создает проблемы при совместном использовании очередей.
Чтобы преодолеть ошибку «Объекты очереди должны делиться между процессами только посредством наследования», мы можем использовать multiprocessing.Manager. Этот класс менеджера позволяет создавать общие ресурсы, включая очереди, и управлять ими.
Включив создание очереди в контекст multiprocessing.Manager(), мы можем сделать его доступным для всех работников. Вот как можно изменить код:
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
m = multiprocessing.Manager()
q = m.Queue()
workers = pool.apply_async(worker, (33, q))
Теперь каждый работник может взаимодействовать с общим объектом q и сообщать результаты обратно базовому процессу. Этот подход обеспечивает эффективную и надежную передачу результатов, сохраняя при этом асинхронный характер apply_async.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3