python-芹菜任务的重用结果

有什么通用的解决方案可以存储和重用芹菜任务结果,而无需再次执行任务?我在metasearch项目中有许多http提取任务,并希望通过存储第一个请求的结果并回发而不进行真正的提取来减少无用的http请求的数量(它们可能花费很长时间并返回相同的结果).同样,如果一个新的提取任务正在进行中,则不启动它也将非常有用.无需运行新的作业应用程序,而必须通过已挂起任务的ID(由任务调用args生成并由其ID)返回AsyncResult.

看起来我需要为具有相同task_id的任务定义新的apply_async(Celery.send_task)行为:

>如果具有给定task_id的任务尚未启动,则将其启动
>如果具有给定task_id的任务已经开始返回AsyncResult(task_id)而没有实际运行任务
> @任务装饰器应该接受新的ttl
kwarg确定缓存时间(仅用于redis后端吗?)

解决方法:

看起来最简单的答案是将结果存储在缓存(如数据库)中,然后首先从缓存中请求结果,否则触发http请求.

我认为芹菜没有什么可以做到的.

编辑:

为了符合您在同一时间发送任务的事实,另一件事是为芹菜任务建立一个锁(请参见Celery Task Lock receipt).

在您的情况下,您想给锁一个包含任务名称和URL名称的名称.如果所有工作人员都可以看到,则可以使用任何想要的缓存系统(在您的情况下为Redis?)

上一篇:监控芹菜任务状态而无需轮询?


下一篇:Android Wifi直接多重连接ad-hoc