【问题标题】:Celery - Activate a task via command line or HTTP requestsCelery - 通过命令行或 HTTP 请求激活任务
【发布时间】:2014-11-03 08:10:49
【问题描述】:

我的代码中有一个预定义的 celery 任务,比如my_proj.tasks.my_celery_task

我想通过命令行/HTTP 请求(不是通过我的应用程序)激活任务。

我搜索了文档(锯花和卷曲选项),但没有一个很好的例子来调用预定义的任务。如何做到这一点?

【问题讨论】:

    标签: python scheduled-tasks celery celery-task flower


    【解决方案1】:

    你可以使用 celery 命令行

    调用任务

    # Positional arguments
    celery call my_celery_task --args='[1,2]' --broker <broker_url>
    # Keyword arguments
    celery call my_celery_task --kwargs='{"x":1, "y":2}' --broker <broker_url>
    # Returns the task-id
    

    得到结果

    celery result <task_id> --result-backend <backend_url>
    

    您应该在 celery 应用程序中选择相同的代理和后端集。

    【讨论】:

      【解决方案2】:

      假设你已经用 Rabbitmq 安装了 Celery,这里是一个简单的例子。

      定义一个任务:my_app.py

      from celery import Celery
      
      app = Celery('tasks', backend='amqp', broker='amqp://')
      
      @app.task
      def add(x, y):
          return x + y
      

      启动一个工人:

      celery worker -l info -A my_app
      

      开始开花

      flower -A my_app
      

      通过命令行添加任务到队列

      curl -X POST -d '{"args":[1,2]}' http://localhost:5555/api/task/async-apply/my_app.add
      

      或通过请求

      import requests, json
      api_root = 'http://localhost:5555/api'
      task_api = '{}/task'.format(api_root)
      args = {'args': [1, 2]}
      url = '{}/async-apply/my_app.add'.format(task_api)
      print(url)
      resp = requests.post(url, data=json.dumps(args))
      reply = resp.json()
      reply
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多