拆分Django项目

时间:2012-02-03 12:06:30

标签: python django multithreading multiprocessing

我有一个包含各种应用程序的django项目,它们是完全独立的。我想让它们在自己的进程中运行它们,因为它们中的一些产生后台线程以定期预先计算一些数据,现在它们正在争夺CPU(机器有很多内核,但你知道,GIL和这样...)

那么,是否有一种简单的方法可以将项目自动拆分为不同的项目,或者至少让每个应用程序都在自己的流程中生效?

2 个答案:

答案 0 :(得分:4)

您可以随时拥有不同的设置文件,但这就像拥有多个项目甚至多个端点一样。通过一些努力,您可以根据请求的路径等配置反向代理转发到正确的Django服务器,但我不认为这是您想要的,这将是您的问题的丑陋解决方案。

解决方案是将繁重的处理移动到作业队列。很多人和项目都喜欢Celery

如果由于某种原因看起来有点矫枉过正,您可以始终基于简单的cron作业实现自己的工作。您可以查看执行此操作的my small project

答案 1 :(得分:1)

最简单的可能就是编写一个custom management command来观察给定模型(数据库表)的新条目并处理它们。该模型由例如Django视图和管理命令定期从cron启动(例如每5分钟)。

示例:用户在站点上注册,但创建帐户是一项昂贵的操作(分配一些空间,ping远程服务等)。因此,您只需将新记录写入AccountRequest表(AccountRequest.objects.create(...))。然后,cron定期启动您的管理脚本(./manage.py account_creator),该脚本检查新的AccountRequest-s(AccountRequest.objects.filter(unprocessed=True)),完成其工作并将这些请求标记为已处理。