@zdr

Обращение к глобальной переменной при мультипроцессинге?

Всем привет!
Написал код, изначально последовательный, без какой либо параллельности.
def getInfo(url):
    response = requests.get(url)
    needToSend = true # В зависимости от логики описанной где-то выше ставим флаг
    if needToSend and url not in sentLinks: # Если надо отправить и еще не отправляли
        msg = ... # Формируем сообщение
        bot.send_message(12345678, msg) # Шлём в телеграм
        sentLinks.append(url) # И сохраняем урл чтобы на следующем круге не писать его в телеграм снова

Допустим есть 300 ссылок. В цикле вызываем нашу getInfo и передаем одну ссылку.
Доходим до конца списка и запускаем по новой скрипт (while true: getInfo)
Так получилось что количество ссылок возросло, и скрипт начал очень медленно работать.
Пришлось использовать multiprocessing Pool. Использую 20 потоков.
Столкнулся с проблемой что у каждого процесса свой sentLinks. В итоге в телеграм приходят 20 одинаковых сообщений с каждого потока.
Подскажите, пожалуйста, как решить проблему?
Возможно использовать глобальную переменную-список в которую будем записывать урл, уже отправленный в телеграм?
  • Вопрос задан
  • 586 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Глобальные переменные - зло, особенно в конкурентном кода. Просто не используйте их нигде и никогда. В вашем случае легко заменить глобальную переменную очередью.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект