在tornado+celery中
运行tasks.py报TypeError: init() got an unexpected keyword argument 'app'错误
发现是worker = celery_worker.worker(app=app)导致的,是为什么的
这个错误通常是因为你的 celery_worker
模块中存在 __init__()
方法并且有一个参数名与 app
相同。这会导致在使用 app=app
时发生冲突。
要解决这个问题,你需要修改 celery_worker
模块使其不再具有与 app
参数同名的属性或方法。如果是必须要保留同名的话,可以使用其他名称或在调用celery_worker.worker()
时不使用 app
参数。
如果不确定哪个方法或属性导致了冲突,可以在 __init__()
的开头添加以下代码,打印出每个参数的名称和值,找出和 app
名称相同的参数:
def __init__(self, app, *args, **kwargs):
for key, value in kwargs.items():
print(f"{key} -> {value}")
# rest of your code here
这应该会帮助您找到问题并解决它。
代码如下(示例):
# 建立实例
app = Celery('tornado')
# 设置代理/队列 redis 消息队列 rabbitmq rocketmq kafka
app.conf.broker_url = 'redis://localhost:6379'
# 设置任务结果
app.conf.result_backend = 'redis://localhost:6379'
# 设置时区
app.conf.timezone = 'Asia/Shanghai'
self = peewee_async.Manager(database)
# 设置一个消费任务
async def consume(id):
# 编写需要执行的代码逻辑
return '消费任务'
# 装饰器调用异步任务 0-9优先级 property 等级
@app.task(name='tornado',property=2)
def async_consume(id):
# 调用异步任务
return asyncio.run(consume(id))