python - Flask Celery:事件同步类型
问题描述
我有非常独特的行为,我需要用芹菜来实现。我知道完全不建议阻止任务,但是我认为这里有必要,如下所述。伪代码:
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 在一个组中启动登录任务,并在满足条件后启动另一个组以执行操作任务。但是,web 操作是时间敏感的,我不想重新打开一个新的 selenium 实例(这会破坏首先拥有这个结构的目的)。
我见过这样的例子:Flask Celery tasklocking but using a Redis cache 对于这个应用程序来说似乎是不必要的(它不需要是原子的,因为“锁”只被task1修改)。我还研究了Celery 的遥控器,但我不确定是否有能力阻止直到收到信号。
这里有一个类似的问题,通过将我想要阻止的任务分成 2 个单独的任务来解决,但我又不能这样做。
解决方案
Celery 任务本身可以将任务排入队列,因此可以等待像“早上 9 点”这样的事件,然后产生一堆并行任务。如果您需要在完成一组并行任务时启动附加任务(即,如果您需要在完成所有扇出任务时执行扇入任务),您想要的机制是chords。
推荐阅读
- javascript - VUEJS 提交事件未在按钮单击时触发
- flutter - 如何在此应用的 Appbar 中添加搜索选项?
- c# - C#是否有一种捷径可以在字符串中获取左右运算符
- reactjs - React Js - Clicking on child radio button hides the current and parent selection
- javascript - Scraping HTML Tables with rowspan attributes using node and cheerio.js
- php - Laravel Application in production on Share Host don't POST, PUT or DELETE in Chrome, Safari and Edge but does in Firefox
- react-native - React Native 升级到 0.64.1 后 Redux Saga 调用停止返回值
- sql-server - 如何解决 RS 错误“这可能是由于数据库中的连接失败、超时或磁盘条件低。”?
- java - 将 jar 文件加载到 Apache Flink 仪表板时出现错误
- java - 如何在 Android Studio (Java) 中的标记点击上显示可修改的表单?