python - 创建 celery 任务然后同步运行

标签 python django celery django-celery

我的应用在一个页面上收集了一堆电话号码。一旦用户点击提交按钮,我就会创建一个 celery 任务来调用每个号码并发出提醒消息,然后将他们重定向到一个页面,在那里他们可以看到有关调用的实时更新。我正在使用网络套接字实时更新每个调用的状态,并且需要同步执行任务,因为我只能从一个号码拨出。

所以一旦第一个调用/任务完成,我希望下一个调用/任务启动。

我看了CELERY_ALWAYS_EAGER设置,但它刚刚经历了第一次迭代并停止了。

@task
def reminder(number):
    # CODE THAT CALLS NUMBER HERE....

def make_calls(request):
    for number in phone_numbers:                     
        reminder.delay(number)      

    return redirect('live_call_updates') 

最佳答案

如果您查看 celery DOCS on tasks您会看到要同步调用任务,您使用 apply() 方法而不是 apply_async() 方法。

所以在你的情况下你可以使用:

 reminder.apply(args=[number])

DOCS 还指出:
如果设置了 CELERY_ALWAYS_EAGER 设置,它将被本地 apply() 调用替换。

感谢@JivanAmara,他在评论中重申,当使用 apply() 时,任务将在本地运行(在调用它的服务器/计算机中)。如果您打算跨多个服务器/机器运行任务,这可能会产生影响。

关于python - 创建 celery 任务然后同步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241381/

相关文章:

django - 让我们用 uWSGI 加密

python - 在生产服务器上工作的端口值应该是多少?

python - celery-django 找不到设置

python - 图形: Rerouting problem test in python language

python - tensorflow 中大型稀疏矩阵的特征向量

django - 类型错误:* 之后的 add() 参数必须是序列,而不是订阅者

python - 在单元测试中运行 Celery worker

python - 具有异步任务和redis的django中的线程安全

python - 将列表分成几乎相等的部分并返回边界

python - Django 1.8 RC1 : ProgrammingError when creating database tables