我正在为我的任务队列使用Dramatiq,它提供了装饰器@dramatiq.actor
来将函数装饰为任务。我尝试编写自己的装饰器来包装@dramatiq.actor
装饰器,这样我就可以向适用于所有任务的装饰器添加一个默认参数@dramatiq.actor
(我正在谈论的参数是priority=100
)。
出于某种原因,我收到以下错误:
TypeError: foobar() takes 1 positional argument but 3 were given
如果我用它切换我的自定义@task
装饰器,@dramatiq.actor
那么我猜我的自定义装饰器不正确,但我无法发现我的错误。
装饰器.py
def task(func=None, **kwargs):
def decorator(func):
@wraps(func)
@dramatiq.actor(priority=100, **kwargs)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
if func is None:
return decorator
return decorator(func)
任务.py
@task
def foobar(entry_pk):
...
视图.py
foobar.send_with_options(args=(entry.pk,))