Python 芹菜配兔子MQ为什么要启动芹菜流程

Python 芹菜配兔子MQ为什么要启动芹菜流程,python,rabbitmq,celery,Python,Rabbitmq,Celery,试图了解芹菜是如何与rabbitmq一起使用的 代码: 问题: 运行芹菜工人-芹菜测试-n1.%h&有什么用?我可以直接运行python脚本 如果要读取被调用函数中的结果,如: from celery import Celery app=Celery('tasks',backend='amqp',broker='amqp://') @app.task() def print_hello(n): print 'hello' for i in xrange(2,n):

试图了解芹菜是如何与rabbitmq一起使用的

代码:

问题:

  • 运行芹菜工人-芹菜测试-n1.%h&有什么用?我可以直接运行python脚本

  • 如果要读取被调用函数中的结果,如:

    from celery import Celery
    
    app=Celery('tasks',backend='amqp',broker='amqp://')
    
    @app.task()
    def print_hello(n):
        print 'hello'
        for i in xrange(2,n):
            print i
        # continue the code from here after the above processing
    
  • 芹菜的想法是,任务在称为“工作者”的单独进程中异步运行,可能在许多机器上。调度任务的应用程序(运行的python脚本)不必知道任何有关设置的信息:工作程序实际运行的位置、工作程序的数量等。这就是为什么您必须自己使用
    芹菜工作程序启动工作程序的原因

    在脚本中,您同步调用该任务,因此它将立即执行,而不是在rabbitmq中排队并传递给工人。在web应用程序的上下文中,您需要以不同的方式安排任务(请参阅芹菜文档)

  • 芹菜可以将任务的结果存储在一个容器中

  • 芹菜的想法是,任务在称为“工作者”的单独进程中异步运行,可能在许多机器上。调度任务的应用程序(运行的python脚本)不必知道任何有关设置的信息:工作程序实际运行的位置、工作程序的数量等。这就是为什么您必须自己使用
    芹菜工作程序启动工作程序的原因

    在脚本中,您同步调用该任务,因此它将立即执行,而不是在rabbitmq中排队并传递给工人。在web应用程序的上下文中,您需要以不同的方式安排任务(请参阅芹菜文档)

  • 芹菜可以将任务的结果存储在一个容器中

  • 关于问题2:

    from path.to module import print_hello
    
    task_result = print_hello.apply_async((10,), {})
    result = task_result.get()
    
    关于问题2:

    from path.to module import print_hello
    
    task_result = print_hello.apply_async((10,), {})
    result = task_result.get()
    
  • 运行芹菜工人-芹菜测试-n1.%h&有什么用?我可以直接运行python脚本。
  • 您可以直接运行脚本,这是正确的,但您必须手动执行

    芹菜的作用是这样的:


    • 您有一个或多个工人在某处运行
    • 应用程序需要请求工作人员执行某些任务。它将消息放入队列(在本例中为RabbitMQ)
    • 芹菜收到消息,要求其中一名工人执行任务
    现在,我当然省略了一些细节(芹菜提供了许多有趣的特性),我想说的是芹菜是关于将任务从应用程序启动到工作人员云的

    因此,手动运行脚本没有任何好处。你应该远程启动任务,芹菜才有用

  • 如果要读取被调用函数中的结果,例如,[…],该怎么办
  • 您必须删除
    ignore\u result=True
    (您已经删除了)。然后,在启动任务的应用程序中,您可以在任务完成后检索结果。摘自:

    要检查任务是否完成,我们可以使用
    .ready
    方法:

    [……]

    我们可以使用
    .get
    方法来获取值

    请注意,
    .get
    将为您提供任务的返回值,而不是输出。您的
    print\u hello()
    正在生成输出,但没有返回任何内容:
    .get
    将返回
    None

    如果希望从其他地方(而不是从启动任务的应用程序)获得结果,可以使用

  • 运行芹菜工人-芹菜测试-n1.%h&有什么用?我可以直接运行python脚本。
  • 您可以直接运行脚本,这是正确的,但您必须手动执行

    芹菜的作用是这样的:


    • 您有一个或多个工人在某处运行
    • 应用程序需要请求工作人员执行某些任务。它将消息放入队列(在本例中为RabbitMQ)
    • 芹菜收到消息,要求其中一名工人执行任务
    现在,我当然省略了一些细节(芹菜提供了许多有趣的特性),我想说的是芹菜是关于将任务从应用程序启动到工作人员云的

    因此,手动运行脚本没有任何好处。你应该远程启动任务,芹菜才有用

  • 如果要读取被调用函数中的结果,例如,[…],该怎么办
  • 您必须删除
    ignore\u result=True
    (您已经删除了)。然后,在启动任务的应用程序中,您可以在任务完成后检索结果。摘自:

    要检查任务是否完成,我们可以使用
    .ready
    方法:

    [……]

    我们可以使用
    .get
    方法来获取值

    请注意,
    .get
    将为您提供任务的返回值,而不是输出。您的
    print\u hello()
    正在生成输出,但没有返回任何内容:
    .get
    将返回
    None


    如果您希望从其他地方(而不是从启动任务的应用程序)获得结果,你可以使用。

    对不起-你能重新措辞问题1-你问的不完全清楚。对不起-你能重新措辞问题1-你问的不完全清楚。你有一个或多个工人在某处运行:你是说工人是芹菜任务吗?另外,如果任务是自动处理的,那么就不需要运行命令芹菜工人-芹菜测试-n1。%h&??@Rajeev:任务是Python函数;工作进程是按要求执行此类任务的进程。当然。但您是说我们不需要显式运行此命令吗?或者为什么要运行这个命令?芹菜工人-芹菜测试-n1.%h&@Rajeev:是的,您必须运行该命令:启动工人需要它。如果你没有工人,谁来执行你的任务?但这也是一个手动过程,对吗?我