【问题标题】:Django Celery Task does not execute with .delayDjango Celery Task 不使用 .delay 执行
【发布时间】:2013-04-05 12:20:15
【问题描述】:

我可以使用

执行我的任务没问题
    scrape_adhoc_reporting([store], [types], inventory)

这是一个问题,因为这项任务很容易需要一个小时。所以我尝试使任务异步。我尝试了以下两种方法:

    scrape_adhoc_reporting.apply_async(args=[[store], [types], inventory])
    scrape_adhoc_reporting.delay([store], [types], inventory)

这两种方法都不起作用。视图只是按原样重定向,但任务永远不会被执行。错误日志中没有错误。关于我做错了什么的任何见解?

编辑:再环顾四周后,我看到人们在谈论注册任务。这是我需要做的事情吗?

【问题讨论】:

  • 注册一个任务意味着当 celery worker 启动时它应该知道它可以执行的任务列表。我假设您使用 django-celery,因此当您的工作人员启动时,它将在每个应用程序目录的 tasks.py 文件中搜索任务(用 @task@periodic_task 装饰的函数)。如果您的任务在其他地方定义,它将不会被执行

标签: django celery


【解决方案1】:

我遇到了同样的问题,我刚刚解决了。 MattH 是对的:这是由于非运行工人造成的。

我在 Windows 上使用 Django (1.5)、Celery (3.0+) 和 Django-Celery。为了让 Celery Beat 正常工作,我遵循了这个教程:http://mrtn.me/blog/2012/07/04/django-on-windows-run-celery-as-a-windows-service/ 在 Windows 上,Beat 只能作为服务启动。

但是,作为您,我的任务已启动但未执行。这来自打包版本 django-windows-tools(来自 pip)中的一个错误。

我通过从 GitHub (https://github.com/antoinemartin/django-windows-tools) 下载最新版本的 django-windows-tools 解决了这个问题。

【讨论】:

  • 谢谢。我一直试图了解为什么 Windows 服务无法正常工作。您的评论对我帮助很大。
【解决方案2】:

如果您希望它远程运行,您需要一个运行加载该任务的工作进程,并配置一个路由系统以获取在调用者和工作人员之间发送的任务请求。

查看 workerstasks 的 celery 文档。

您正在运行的代码只是在本地执行任务。

【讨论】:

    【解决方案3】:

    在 Windows 中使用异步 celery 任务时,通常会出现错误,通过设置参数来修复。

    即: 在 celery.py 文件中使用 Django,您应该:

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings') os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')

    这将解决 Windows 上的问题,并且不会在其他系统上造成不兼容问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 2014-04-04
      • 1970-01-01
      • 2013-03-06
      • 2014-06-06
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多