Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Celery 设置芹菜任务属性(即时间限制和软时间限制)无效_Celery_Celery Task - Fatal编程技术网

Celery 设置芹菜任务属性(即时间限制和软时间限制)无效

Celery 设置芹菜任务属性(即时间限制和软时间限制)无效,celery,celery-task,Celery,Celery Task,根据这个线程,问题已经解决了,但似乎还没有解决。 我目前的芹菜版本是3.1.18(Cipater) 我正在尝试覆盖任务的默认设置。目标是更改任务的软时限和硬时限,因为同一任务被用于多种目的 将软时间限制和时间限制传递给MyTask构造函数以更改默认设置 ///celery/app/ task.py class MyTask(task.Task): time_limit = 100 soft_time_limit = 110 max_retries = 0 def

根据这个线程,问题已经解决了,但似乎还没有解决。

我目前的芹菜版本是3.1.18(Cipater)

我正在尝试覆盖任务的默认设置。目标是更改任务的软时限和硬时限,因为同一任务被用于多种目的

将软时间限制和时间限制传递给MyTask构造函数以更改默认设置

///celery/app/ task.py
class MyTask(task.Task):   
    time_limit = 100
    soft_time_limit = 110
    max_retries = 0

def __init__(self, time_limit=None, soft_time_limit=None,
             max_retries=None, *args, **kwargs):
    if time_limit:
        self.time_limit = time_limit
    if soft_time_limit:
       self.soft_time_limit = soft_time_limit
    if max_retries:
       self.max_retries = max_retries
    task.Task.__init__(self, *args, **kwargs)


t1 = MyTask(time_limit=30, soft_time_limit=20,
        max_retries=5)
or

t1 = MyTask()
t1.time_limit = 30
t1.soft_time_limit = 20
然后将t1.si()传递给task.RetryableChain(…)

当worker调用run方法时,它仍然会收到旧值(time_limit=100),其中我已经设置了time_limit=30


请告诉我3.1.18版本中是否仍存在此问题。

我必须修复芹菜代码才能使其正常工作。这绝对是一个临时修复,但它可以工作。我不确定属性何时设置为新值,以及为什么不将这些值传输到worker.job。我可以感觉到,当我们调用task.si或s()时,它会创建一个签名实例,该实例不包含这些时间限制属性,因此它从类中存储的原始值中获取。只是一个想法

t1 = MyTask()
kwargs = {}
kwargs['time_limit'] = 30
kwargs['soft_time_limit'] = 40

t.s(kwargs)
---->>> /芹菜/worker/job.py

def execute_using_pool(self, pool, **kwargs):
    """Used by the worker to send this task to the pool.

    :param pool: A :class:`celery.concurrency.base.TaskPool` instance.

    :raises celery.exceptions.TaskRevokedError: if the task was revoked
        and ignored.

    """
    uuid = self.id
    task = self.task
    if self.revoked():
        raise TaskRevokedError(uuid)

    hostname = self.hostname
    kwargs = self.kwargs
    if task.accept_magic_kwargs:
        kwargs = self.extend_with_default_kwargs()
    request = self.request_dict
    request.update({'hostname': hostname, 'is_eager': False,
                    'delivery_info': self.delivery_info,
                    'group': self.request_dict.get('taskset')})
    timeout, soft_timeout = request.get('timelimit', (None, None))
    # timeout = timeout or task.time_limit
    # soft_timeout = soft_timeout or task.soft_time_limit
    **# SKAR  request.get(‘time limit’) always returns the original value stored in Task.
    timeout = kwargs.get('time_limit', task.time_limit)
    soft_timeout = kwargs.get('soft_time_limit', task.soft_time_limit)**
    result = pool.apply_async(
        trace_task_ret,
        args=(self.name, uuid, self.args, kwargs, request),
        accept_callback=self.on_accepted,
def execute_using_pool(self, pool, **kwargs):
    """Used by the worker to send this task to the pool.

    :param pool: A :class:`celery.concurrency.base.TaskPool` instance.

    :raises celery.exceptions.TaskRevokedError: if the task was revoked
        and ignored.

    """
    uuid = self.id
    task = self.task
    if self.revoked():
        raise TaskRevokedError(uuid)

    hostname = self.hostname
    kwargs = self.kwargs
    if task.accept_magic_kwargs:
        kwargs = self.extend_with_default_kwargs()
    request = self.request_dict
    request.update({'hostname': hostname, 'is_eager': False,
                    'delivery_info': self.delivery_info,
                    'group': self.request_dict.get('taskset')})
    timeout, soft_timeout = request.get('timelimit', (None, None))
    # timeout = timeout or task.time_limit
    # soft_timeout = soft_timeout or task.soft_time_limit
    **# SKAR  request.get(‘time limit’) always returns the original value stored in Task.
    timeout = kwargs.get('time_limit', task.time_limit)
    soft_timeout = kwargs.get('soft_time_limit', task.soft_time_limit)**
    result = pool.apply_async(
        trace_task_ret,
        args=(self.name, uuid, self.args, kwargs, request),
        accept_callback=self.on_accepted,