0

我想通过复制模型将主要 django 项目的繁重流程分担到另一个 django 项目。

这意味着共享数据库表。这是一个解释表是如何共享的图表:按照编号的箭头,看看我是如何想象信息流的。

http://i.imgur.com/kOdeq.png

INTERFACE 项目是拼图的用户交互部分,它处理输入和输出并定义用户希望解决的问题。SOLVE 项目解决了繁重的用户定义问题,并在准备好后,将解决方案作为记录放入 INTERFACE 可以读取的自己的表中,并将 INTERFACE 呈现给用户。

这种设计在两个 ORM 的同步方面会有哪些注意事项?这甚至是个好主意吗?

4

1 回答 1

1

换句话说,您正在重新发明一个任务队列?

也就是说,接口只是插入表示“为我做这个”的记录,然后从“这是为你做的”表(或同一个表,没关系)中检索结果?

您真正需要的是某种远程异步 rpc 调用接口,是的,如果您愿意,您可以以这种方式重建。

我仍然建议重新评估芹菜 - 我已经多次推迟了它,但现在我已经设置了它,这让我很震惊,我之前没有使用它。您甚至可以使用 Django DB 作为消息队列后端(尽管我只说对低容量站点这样做)。

无论如何,至于具体问题:

使用相同数据库表的两个独立进程没有继承问题,Django 和您的数据库连接器都不会在这方面添加额外的约束。

您将需要您的工作进程(“解决”)定期轮询数据库以查找要执行的任务,或向其发送消息(提示:芹菜!)。您的 ui 客户端(“界面”)可以在用户刷新时检查数据库。

从实现的角度来看,在两个项目之间完全共享代码(所有模型、视图等)可能是最简单的。您将有一个进程以正常方式启动 ui Web 服务器,对于工作人员来说,连接自定义管理命令可能是启动工作人员循环的最简单方法。

如果您在打算写入行时不使用select_for_update ,那么您“可能”会遇到一些与数据库锁定/竞争条件有关的问题。或者,您可以使用.save(update_fields=zzz)来避免争用,但这仅在 1.5 中。

于 2012-09-27T16:35:44.967 回答