我有一个对服务器的API调用,在该服务器上我正在使用芹菜做一些处理。 芹菜的输出传递回客户端。

我用了

som = task_async_get_cached_session.delay('session_123')
print 'before'
result = som.get(timeout=1)
print 'after'

我查看了celery -l INFO ,任务succeeded in 0.024465521s: {data: {session_123: something}}succeeded in 0.024465521s: {data: {session_123: something}}

但是我的客户没有得到响应,因此我设置了超时时间,现在我得到The operation timed out. (<class 'celery.exceptions.TimeoutError'>) The operation timed out. (<class 'celery.exceptions.TimeoutError'>)

当我查看日志跟踪时,仅打印before 我的问题是,当您希望将celery任务生成的结果传递给客户端时,如何在不使用get()情况下使用celery?

我知道get()会将我的API调用转换为同步,但是我还有什么选择? 芹菜的真正用途是什么? 还有其他方法可以将我的API更改为“异步”吗?

===============>>#1 票数:1

使用celery.result设计一个函数来检查任务状态并获取结果。

from celery.result import AsyncResult

def get_result(my_work):
    work = AsyncResult(my_work.id)
    if work.ready():                     # check task state: true/false
        try:
            result = work.get(timeout=1) 
            return result
        except:
            pass

    return "Please waiting result."

  ask by Anuj Acharya translate from so

未解决问题?本站智能推荐:

1回复

Django Celery开始

我正在开发一个Django应用程序,使用Celery和RabbitMQ作为工作程序。 我用以下命令启动Celery(在Fedora上) 但是,出现以下错误: 在我的办公室中,我们正在使用Ubuntu,并且未收到任何此类错误。 这是完整的追溯: 另外,这是我的pip
2回复

Django-如何在celery和redis上使用异步任务队列

为了简单起见,我删除了很多代码,但这就是要点。 尽管我已经为my_func发布了代码,但它是一个耗时的函数,导致index.html在访问时加载一段时间。 如何使用celery和redis在后台运行my_func,以使index.html加载更快? 我已经阅读了芹菜文档,但是在设置芹
2回复

当celery任务在Django中完成时,更新UI的最佳方法是什么?

我希望用户能够单击一个按钮来生成报告,向他显示生成报告的动画,然后一旦报告完成生成,就在页面上显示成功一词。 我正在考虑在单击生成报告按钮时创建一个芹菜任务。 任务结束后,更新UI的最佳方法是什么? 是否应该通过AJAX调用不断检查任务是否已完成? Django中是否有更好的方法或第
2回复

Django和Celery中的异步逻辑

从这个问题出发,我有这个任务: 我理解Celery工作的方式是,这个任务可以放入一个qeue并在一段时间后执行,假设有很多请求。 我们假设移动应用正在与此服务器通信。 用户将用户名和密码的组合发送到服务器进行注册。 服务器只有在处理完任务后才会返回令牌。 如果客户没有令牌,则
2回复

不同服务器和芹菜上的Django和芹菜能够在任务完成后向django发送回调

我有一个django项目,我使用芹菜和rabbitmq来执行一组异步。 任务。 所以我计划的设置是这样的。 Django app在一台服务器上运行。 芹菜工人和rabbitmq从另一台服务器运行。 我最初的问题是,如何从另一台服务器上的芹菜任务访问django模型?
1回复

芹菜和Django退货后,我该如何延误并得到回报?

目前正在尝试清理celery如何与django一起使用,这被告知可以异步工作 我已经运行了简单的celery任务,该任务在遵循文档的基础上可以正常工作,因此我相信我已经安装了celery并且可以正常运行。 但是我不知道它在return后如何工作和运行 例如 我有这个来创建
1回复

无法理解Celery Tasks与Django的关系

我正在使用Django来收听语音命令。 我打算将Celery用作运行单独的进程进行监听和执行命令的单独进程的方式。 当我用Celery设置Django时,我曾设想过启动Django(./manage.py runserver),并在启动时启动这两个进程。 但是到目前为止,我看到Ce
2回复

在Celery中,如何运行任务,然后让该任务运行另一个任务,并继续执行?

现在,我执行简单的任务。 它返回一个随机数。 但是,如何让它在该任务中运行另一项任务 ?
1回复

将QuerySet传递给Django 1.11中的Celery Task

我想将一些长查询移至Celery中的异步任务,然后使用AJAX检索该额外信息。 现在,我得到这样的QuerySet: 任务: 我想在这里做: 问题是: 如何将QuerySet传递给Celery任务? 现在,它抛出一个错误,表明此操作无法完成。 我发现这里可能会使用
3回复

带有Celery的Django-找不到现有对象

我从另一个芹菜任务执行芹菜任务时遇到问题。 这是有问题的代码段(数据对象已存在于数据库中,其属性仅在finalize_data函数内部更新): 在optimize_data函数中获取调用失败,并显示“数据匹配查询不存在”。 如果我在finalize_data函数中调用pk函数