Stu*_*Cat 10 python django rabbitmq celery
说我有这个任务:
def do_stuff_for_some_time(some_id):
e = Model.objects.get(id=some_id)
e.domanystuff()
Run Code Online (Sandbox Code Playgroud)
而我正在使用它:
do_stuff_for_some_time.apply_async(args=[some_id], queue='some_queue')
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,使用相同的arg参数有很多重复性任务,并且它在队列中令人难以置信.
只有在队列中没有相同的args和相同的任务时才可以应用异步吗?
celery-singleton解决了这个需求
警告:需要 Redis 代理(用于分布式锁)
pip install celery-singleton
使用Singleton
任务基类:
from celery_singleton import Singleton
@celery_app.task(base=Singleton)
def do_stuff_for_some_time(some_id):
e = Model.objects.get(id=some_id)
e.domanystuff()
Run Code Online (Sandbox Code Playgroud)
来自文档:
调用 do_stuff.delay() 会将新任务排队或返回当前排队/正在运行的任务实例的 AsyncResult