Совместное использование блокировок между процессами Python
При попытке использовать блокировку между несколькими процессами вы можете столкнуться с ошибкой: «Блокировать объекты следует только распределяться между процессами посредством наследования."
Чтобы решить эту проблему, существует два основных подхода:
Использование Manager
Этот подход включает в себя создание объекта Manager и передачу Manager.Lock():
from multiprocessing import Manager ... m = Manager() l = m.Lock()
Однако использование Manager приводит к необходимости дополнительного процесса для размещения сервера Manager и связи через IPC.
Передача блокировки в пуле Создание
Альтернативный метод — передать обычный multiprocessing.Lock() во время создания пула с использованием ключевого слова инициализатора. аргумент:
def init(l): global lock lock = l l = multiprocessing.Lock() pool = multiprocessing.Pool(initializer=init, initargs=(l,))
Этот метод делает экземпляр блокировки глобальным для всех дочерних рабочих процессов. Обратите внимание, что этот подход устраняет необходимость в частичной функции.
Применяя один из этих методов, вы можете эффективно распределять блокировки между процессами Python, обеспечивая скоординированный доступ к общим ресурсам.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3