【问题标题】:Can I use Python requests with celery?我可以将 Python 请求与 celery 一起使用吗?
【发布时间】:2012-12-07 10:43:54
【问题描述】:

我在名为 tasks.py 的 celery 模块中定义了以下内容,并导入了 requests 库:

@celery.task
def geturl(url):
    res = requests.get(url)
    return res.content

每当我调用任务(来自 tasks.py 或 REPL)时:

res = geturl.delay('http://www.google.com')
print res.get()

以下是 celery 服务器上的日志条目:

[2012-12-19 18:49:58,400: INFO/MainProcess] 开始新的 HTTP 连接 (1): www.google.com [2012-12-19 18:49:58,594: INFO/MainProcess] 开始新的 HTTP 连接 (1): www.google.ca [2012-12-19 18:49:58,801: INFO/MainProcess] 任务 tasks.geturl[48182400-7d67-466b-ba5c-867747cb3974] 在 0.402245998383s 内成功:无

但是当我通过调用 geturl('http://www.google.com') 以同步方式运行它时,我得到了响应。我已通读文档,似乎无法弄清楚为什么这不起作用。它的主要用途是轮询 API,有人可以解释为什么这不起作用吗?

谢谢!

【问题讨论】:

    标签: python celery


    【解决方案1】:

    res.content 只是一个str 实例,你没有理由不能返回它。您的问题可能出在其他地方,可能在您的 celery 配置中。


    Many configuration parameters play a role in how the results will be stored;看看他们。
    您要检查的第一个可能是CELERY_IGNORE_RESULT

    您还应该检查您的结果代理配置。

    【讨论】:

    • 谢谢,这似乎有效...该任务似乎返回了正确的响应(如下面的日志条目所示):[2012-12-19 22:40:06,580: INFO/ MainProcess] 任务 tasks.geturl[52746098-f651-4627-96a5-ae50024a2b98] 在 0.360215902328s 内成功:'
    • 我相信上面的 ^ 正在发生,因为我有 celery.worker_main() 在我定义任务的同一模块中执行,所以任务从来没有时间运行,因为事件循环阻塞了线。一旦我将它从工作代码中移出,一切都会按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多