2012-12-20 15 views
2

我有以下命名tasks.py与请求库中导入芹菜模块中定义:我可以用芹菜使用Python请求吗?

@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() 

这里是芹菜服务器上的日志条目:

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

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

谢谢!

回答

1

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


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

您还应该检查您的结果经纪人配置。

+0

谢谢,这似乎工作...该任务似乎返回正确的响应(如下面的日志条目所示): [2012-12-19 22:40:06,580:信息/ MainProcess]任务tasks.geturl [52746098-f651-4627-96a5-ae50024a2b98]成功在0.360215902328s:'<!doctype html> calvdee

+0

我相信上面的^发生了,因为我有celery.worker_main()在我有任务定义的相同模块中执行,所以任务从来没有时间运行,因为事件循环阻塞了线程。一旦我将这个代码移出工作代码,一切都按预期工作。 – calvdee

相关问题