在使用Celery
的时候发现有的时候Celery
会将同一个任务执行两遍。比如相同的任务在不同的worker
中被分别执行,并且时间只相差几毫秒,使用Celery Once
可以处理这一情况。Celery Once
是利用 Redis 加锁来实现, Celery Once
在 Task
类基础上实现了QueueOnce
类,该类提供了任务去重的功能,所以在使用时,我们自己实现的方法需要将QueueOnce
设置为base
。
1 |
|
说明:once
参数表示,在遇到重复方法时的处理方式,默认 graceful 为 False,那样 Celery 会抛出 AlreadyQueued 异常,手动设置为 True,则静默处理。
另外如果要手动设置任务的key,可以指定keys参数, 例:
1 |
|
参考:https://blog.csdn.net/qq_41333582/article/details/83899884