tornado+celery

在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

这应该会帮助您找到问题并解决它。

  • 这篇博客: tornado如何快速使用celery中的 2.celery文件代码 文件名 my_task.py 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码如下(示例):

    # 建立实例
    
    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))