Python Django、RabbitMQ和;芹菜-为什么芹菜会在我在开发中更新Django代码后运行旧版本的任务?

Python Django、RabbitMQ和;芹菜-为什么芹菜会在我在开发中更新Django代码后运行旧版本的任务?,python,django,rabbitmq,celery,django-celery,Python,Django,Rabbitmq,Celery,Django Celery,因此,我有一个Django应用程序,它偶尔会向芹菜发送一个任务以进行异步执行。我发现,当我在开发中处理代码时,Django开发服务器知道如何自动检测代码何时发生了更改,然后重新启动服务器,以便我可以看到更改。然而,我的应用程序的RabbitMQ/芹菜部分并没有注意到开发中的这些变化。如果我更改了稍后将在芹菜任务中运行的代码,芹菜将继续运行旧版本的代码。我能让它了解变化的唯一方法是: 阻止芹菜工人 停止兔子 重置RabbitMQ 启动RabbitMQ 将用户添加到我的Django应用程序配置为使用

因此,我有一个Django应用程序,它偶尔会向芹菜发送一个任务以进行异步执行。我发现,当我在开发中处理代码时,Django开发服务器知道如何自动检测代码何时发生了更改,然后重新启动服务器,以便我可以看到更改。然而,我的应用程序的RabbitMQ/芹菜部分并没有注意到开发中的这些变化。如果我更改了稍后将在芹菜任务中运行的代码,芹菜将继续运行旧版本的代码。我能让它了解变化的唯一方法是:

  • 阻止芹菜工人
  • 停止兔子
  • 重置RabbitMQ
  • 启动RabbitMQ
  • 将用户添加到我的Django应用程序配置为使用的RabbitMQ
  • 为此用户设置适当的权限
  • 重新启动芹菜工人
  • 然而,这似乎是一种比我应该采取的更为激进的方法。我可以使用更轻量级的方法吗

    我发现,在开发代码时,Django 开发服务器知道如何自动检测代码何时被删除 已更改,然后重新启动服务器,以便查看更改。然而, 我的应用程序中的RabbitMQ/芹菜部分不了解这些种类 发展变化的趋势

    你在这里所描述的是完全正确的。请记住,Python将使用,因此在使用新代码之前,需要重新启动Python解释器

    问题是“西芹为什么不选择新版本”,但这是大多数库的工作方式。然而,Django开发服务器是一个例外。它有特殊的代码,可以帮助它根据需要自动重新加载Python代码

    请注意,当您在生产环境中运行Django时,您可能需要重新启动/重新加载服务器(因为您不会在生产环境中使用开发服务器,而且大多数生产服务器不会尝试实现检测文件更改和自动重新加载服务器的有问题功能)


    最后,您不需要重新启动RabbitMQ。您只需重新启动芹菜工人即可使用新版本的Python代码。但是,如果新版本的代码正在更改消息中的数据,则可能必须清除队列。例如,芹菜工人可能正在接收邮件的版本1,但它希望接收到版本2。

    对不起,我也遇到了同样的问题。我通过
    /etc/init.d/celeryd restart
    重新启动工作进程。大多数情况下,它是有效的。但有时不会,即使我重新启动服务器。