首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-Q中的任务重叠

Django-Q中的任务重叠
EN

Stack Overflow用户
提问于 2022-10-07 12:42:34
回答 1查看 47关注 0票数 0

我有一个任务,我想每分钟运行,所以数据是尽可能新鲜的。但是,根据更新的大小,它可能需要超过一分钟的时间才能完成。Django-Q创建新任务并每分钟对其进行排队,因此有一些重叠,几乎同步相同的数据。是否有可能不安排已经在进行的任务?

EN

回答 1

Stack Overflow用户

发布于 2022-10-10 10:54:17

最后,我创建了锁任务执行的装饰器,在新任务上,如果锁不可用,运行就会立即返回。超时为1小时(在我的情况下已足够)。

代码语言:javascript
复制
from functools import wraps

from django.core.cache import cache
from redis.exceptions import LockNotOwnedError


def django_q_task_lock(func):
    """
    Decorator for django q tasks for preventing overlap in parallel task runs
    """

    @wraps(func)
    def wrapped_task(*args, **kwargs):
        task_lock = cache.lock(f"django_q-{func.__name__}", timeout=60 * 60)
        if task_lock.acquire(blocking=False):
            try:
                func(*args, **kwargs)
            except Exception as e:
                try:
                    task_lock.release()
                except LockNotOwnedError:
                    pass
                raise e
            try:
                task_lock.release()
            except LockNotOwnedError:
                pass

    return wrapped_task

@django_q_task_lock
def potentialy_long_running_task():
    ...
    # task logic
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73987331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档