在使用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