有没有任何通用的解决方案可以存储和重用芹菜任务结果而不必再次执行任务?我在metasearch项目中有许多httpfetch任务,希望通过存储第一个请求的结果并在不进行实际获取的情况下返回第一个请求的结果来减少无用http请求的数量(它们可能需要很长时间并返回相同的结果)。另外,当同一个任务正在进行时,不要启动新的fetch任务,这将非常有用。应用程序不必运行新的作业,而是按已挂起任务的id(id是唯一的,由任务调用参数生成)返回AsyncResult。在
看来我需要为具有相同任务标识的任务定义新的apply_async
(Celery.send_task
)行为:
@task
装饰器应接受新的ttl
kwarg确定缓存时间(仅针对redis后端?)在
看起来最简单的答案是将结果存储在缓存(如数据库)中,然后首先从缓存中请求结果,否则触发http请求。在
我不认为芹菜能起到这种作用。在
编辑:
为了遵守任务同时被发送的事实,另一件事是为celery任务构建一个锁(参见Celery Task Lock receipt)。在
在您的例子中,您需要给锁一个包含任务名和url名的名称。如果所有的工作人员都能看到你想要的缓存系统,你可以使用它(你的例子中是Redis?)在
相关问题 更多 >
编程相关推荐