У меня довольно уникальное поведение, которого мне нужно добиться с сельдереем. Я понимаю, что блокировать задачи вообще не рекомендуется, но я считаю, что это необходимо, как я описываю ниже. Псевдокод:
Task 1:
Set event to false
Start group of task 2
Scrape website every few seconds to check for changes
If changes found, set event
Task 2:
Log into website with selenium.
Block until event from Task 1 is set
Perform website action with selenium
Я бы хотел, чтобы task2 выполнялась несколько раз параллельно для нескольких пользователей. Поэтому проверка веб-сайта на наличие обновлений в каждом экземпляре task2 приведет к большому количеству запросов к веб-сайту, что неприемлемо.
Для обычного потока, подобного этому, я бы использовал task1 для запуска задач входа в группу и запустить другую группу после выполнения условия для выполнения задач действия. Однако веб-действие чувствительно ко времени, и я не хочу повторно открывать новый экземпляр селена (что, в первую очередь, нарушило бы цель наличия этой структуры).
Я видел примеры например: Flask Блокировка задачи Celery , но использование кеша Redis для этого приложения кажется ненужным (и это не обязательно должно быть atomi c, потому что «блокировка» изменяется только с помощью task1). Я также изучил пульт дистанционного управления Celery , но я не уверен, есть ли возможность блокировать, пока не будет получен сигнал.
Есть аналогичный вопрос здесь , который был решен путем разделения задачи, которую я хочу заблокировать, на 2 отдельные задачи, но я снова не могу этого сделать.