python - 协调两个 celery 任务

标签 python django parallel-processing celery

我有两个成对调用的任务。它们是单独的任务,因为它们与单独的阻塞 i/o 资源通信,并且其中一个 (TaskA) 在任务对的前一个实例仍在运行的情况下提前退出,而 TaskB 仍将运行(即 TaskA 关心重叠)任务对,TaskB 没有)。

现在我正在考虑按照说明书示例使用缓存 token 来执行所制定的规则

def TaskA()
   take TaskA token
   exit if already taken
   check if TaskB token is taken
   exit if TaskB token is taken
   continue working

def TaskB()
   take TaskB token
   if token taken exit
   do task

这样做的问题是,在一对TaskA和TaskB中,如果TaskB先启动,TaskA将错误地退出。如果我可以强制 TaskA 始终首先启动,那么也许这是一个不错的方法。

否则: 我对此的想法是在调用函数中生成 rand() 或时间戳,将其传递给两个任务实例。 TaskB 实例会将其附加到它所采用的 token 中,如果 rand 部分与其自身匹配,则 TaskA 将使用它来忽略 TaskB token ,如果采用了 token ,但 rand 部分不匹配,则退出。

def TaskA(rand)
   take TaskA token
   exit if already taken
   check if TaskB_* token is taken
   exit if TaskB_not_rand token is taken
   continue working

def TaskB(rand)
   check TaskB_* token
   if TaskB_* token taken exit
   take TaskB_rand token
   do task

考虑到提出的问题,按照我在第二个版本中建议的方式(附加 rand() )使用 token 是协调任务的正确方法吗?或者有没有更简单的方法。

如果问题不清楚,或者您对为什么任务具有此操作标准感到好奇,我可以添加更多信息。

最佳答案

不使用随机/时间戳,而是使用序列号,那么:

def TaskA():
  take TaskA_token
  exit if TaskA_token taken
  take TaskB_token
  if TaksB_token.sequence <= self.sequence:
    exit

关于python - 协调两个 celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464102/

相关文章:

python - 检索当前行和上一个/下一个正值之间的行数

Python-将随机数分配给字典值?

python - 如何提高报告处理时间(Django/MySQL)?

python - 在循环中在 python 中传递多个参数

python - ForLoop 迭代作为 Django 模板中的列表索引

python - 如何链接到 django 上的用户个人资料

django - 将 django.contrib.auth.models.User 密码、sha1 反转为可读字符串

python - 在 Dask 中预先分散数据对象是否有优势?

java - Flink Kafka - 如何使应用程序并行运行?

haskell - 编写并行 `` zip `` using ` `Control.Parallel.Strategies``