Celery和弦KeyError与签名

问题描述 投票:0回答:1

我正在尝试创建一个Celery和弦来作为回调运行任务,即当队列中的其他人被标记为已完成时。

问题是我仍然有这个错误:KeyError: 'kwargs',我不知道为什么。

这是我的代码:

@celery_app.task(
    base=Base,
    bind=True,
    ignore_result=True
)
def callback(self, date=None, queries=[], user_email=None, db_session=None, prestodb_session=None):
    # Do something
    chain(
        another_task.si(user_email=user_email, db_session=db_session),
        group(*tasks)
    ).apply_async()


@celery_app.task(
    base=Base,
    bind=True,
    ignore_result=False
)
def run(self, user_email, pg_session=None, prestodb_session=None):
    chord(
        task1.s(
            user_email=user_email,
            db_session=pg_session
        ),
        task2.s(
            user_email=user_email,
            db_session=pg_session
        ),
        task3.s(
            user_email=user_email,
            pg_session=pg_session,
            prestodb_session=prestodb_session
        )
    )(
        callback.s(
            user_email=user_email,
            date=self.context.run_time,
            db_session=pg_session,
            prestodb_session=prestodb_session
        )
    )

而错误:

Traceback (most recent call last):
  File "/home/virtualenv/lib/python3.6/site-packages/celery/app/trace.py", line 382, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/virtualenv/lib/python3.6/site-packages/celery/app/trace.py", line 641, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/app/app/tasks/tasks.py", line 87, in run
    prestodb_session=prestodb_session
  File "/home/virtualenv/lib/python3.6/site-packages/celery/canvas.py", line 1189, in __call__
    return self.apply_async((), {'body': body} if body else {}, **options)
  File "/home/virtualenv/lib/python3.6/site-packages/celery/canvas.py", line 1223, in apply_async
    kwargs = dict(self.kwargs['kwargs'], **kwargs)
KeyError: 'kwargs'

我尽我所能:将签名从mutable更改为immutable,在回调方法定义中添加* args和** kwargs作为参数,删除所有params我仍然有问题。

我不知道如何才能做到这一点。你可以帮帮我吗?谢谢!!

--

Python版本:3.6 Celery版本:4.2.1

python-3.x celery
1个回答
0
投票

显然,我还不能发表评论。你是如何运行run任务的?我认为这个问题可能与你的一个任务有关,我尝试了类似的东西只是一个简单的任务,打印一个字符串,它的工作原理。

你看到有什么东西被执行了吗?也许是和弦?

© www.soinside.com 2019 - 2024. All rights reserved.