0

我正在开发一个使用永久对象 MyService 的 Web 应用程序。使用 Web 界面,我动态更新其状态并监控其行为。现在我想定期调用它的一种方法。我正在考虑使用 celery PeriodicTask 但遇到了一些范围问题。看来我需要执行三个不同的过程:

python manage.py runserver
python manage.py celery worker
python manage.py celerybeat

问题是,即使我确保 MyService 是一个可以被多个线程安全使用的单例,celery 也会创建自己的对象的新副本。有没有办法可以在 django 服务器和 celery 主进程之间共享这个对象?我试图找到一种从 django 脚本中启动 celery 的方法,但直到现在都没有成功。将不胜感激任何帮助。

4

1 回答 1

1

如果您需要在多个进程甚至多台机器之间共享某些内容(例如,您的工作人员可以在单独的机器上运行),那么共享信息的最佳(可能也是最简单)的做法是使用外部服务。

在最简单的情况下,您可以使用 Django 的 DB,但是如果您遇到这不适合您,例如,如果您有繁重的写入负载,您可以使用 Redis 或 Memcache 之类的东西(您也可以通过 Django 的缓存 API 与之交谈)。这些将使您能够处理大的写入负载,此外您还可以使用例如。Redis 也可以作为 celery 的队列。

于 2013-05-29T13:05:14.143 回答