У меня есть программа multiprocessing
, где
- один процесс добавляет элементы в общий список (
multiprocessing.Manager().list()
) - несколько других процессов потребляют эти элементы из этого списка (и удаляют их); они запускаются до тех пор, пока в списке что-то не обработает, и вышеописанный процесс все еще добавляет в список.
Я реализовал блокировку (через multiprocessing.Lock()
) при добавлении в список или удалении из него. Поскольку существует один "фидерный" процесс и несколько (10-40) "потребительских", все конкурирующие за блокировку, и что потребительские процессы бывают быстрыми, я получаю процесс "фидера", который с трудом приобретает блокировку.
Есть ли понятие "приоритет" при покупке блокировки? Я бы хотел, чтобы процесс "фидера" приобрел его с большим приоритетом, чем другие.
В настоящее время я смягчил проблему, когда "потребительские" процессы ждут случайного времени, прежде чем пытаться получить блокировку, пока процесс "фидер" (когда он заканчивается, устанавливает флаг). Это обходной путь, который работает, но он уродливый и вряд ли эффективен (у меня есть процессы ждут random.random()*n
секунды, где n
- количество процессов. Это полностью заполненный номер, возможно, неправильный).