代码之家  ›  专栏  ›  技术社区  ›  Udara Seneviratne

未调用Celery任务方法

  •  3
  • Udara Seneviratne  · 技术社区  · 6 年前

    我有以下方法调用&Python Django web应用程序中的特定方法。(请注意,我对python、Django或芹菜不太熟悉)

    方法如下:

    @shared_task(bind=True, default_retry_delay=10, max_retries=3, ignore_results=False)
    def push_sns_message(self, sns_alias, message, target_arn):
        """
        Celery task
        """
        logger.debug("########## Hit the Celery Task ###############")
        print "########## Hit the celery ###########"
        connection = sns_connections[sns_alias]
        return connection.publish(message=message, target_arn=target_arn) 
    

    方法调用如下:

    print "########## Calling to celery ###########"
    push_sns_message.s(self.sns_connection, json.dumps(wrapper[0]), self.sns_arn)
    

    问题是,每当我运行应用程序时,都会出现push\u sns\u消息。s()但不进入其中。我能看到指纹

    “#############################”

    但看不到下面的打印,也不调用其他行

    “###########################”

    请解释这种行为。

    2 回复  |  直到 6 年前
        1
  •  4
  •   CoolestNerdIII    6 年前

    如果其他答案没有帮助,我有一些潜在的建议。

    首先,你有芹菜工人吗?否则,任务将排队,但在工作线程准备好接收任务之前不会执行。您可以简单地调用该函数(不使用.s),该函数应作为常规函数执行。

    其次,“.s”是一个签名,但实际上在没有“apply\u async”的情况下不会被调用。尝试调用如下函数:

    push_sns_message.s(self.sns_connection, json.dumps(wrapper[0]), self.sns_arn).apply_async()
    

    或者像这样:

    push_sns_message.s(self.sns_connection, json.dumps(wrapper[0]), self.sns_arn).delay()
    

    希望这会有所帮助,但以下是 documentation 你需要进一步调查这个问题。

        2
  •  0
  •   subramanyam    6 年前

    日志将显示在芹菜的工作日志中,而不是django的标准日志中

    如果您想调试它,请在rdb中查找芹菜 http://docs.celeryproject.org/en/latest/reference/celery.contrib.rdb.html#usage