处理Django的长期上行请求的最快,最简单的方法

时间:2014-02-09 17:10:26

标签: python django multithreading twisted uwsgi

我正在和Uwsgi一起使用Django。我们有8个进程在运行,我没有真正的迹象表明我们的代码特别是线程安全,因为它从来没有考虑到线程。

最近,我们添加了通过各种API从服务供应商处获取实时费率并立即为用户显示的功能。问题是这些请求是旧的Web服务技术,并且由于它们的响应时间,在获得供应商的所有费率(或者它放弃)之前所需的时间可能长达10秒。

这是一个问题。我们的网站拥有相当不错的流量,客户需要经常查看这些费率。只有8个进程,很容易看出服务器如何等待这些上游请求。特别是当需要进行其他优化以使站点基线更快时(我们正在努力)。

我们创建了一个单独的库(应该主要是线程安全的,如果没有,应该很容易转换为它),请求速率,我们可以分离出它的配置。所以我想用自己的线程创建一个单独的服务,也许是在Twisted中,让浏览器联系JSON服务,而不是让它在主Django服务器上运行。

这个解决方案是好的吗?你能想到更好或更简单的方法吗?我应该使用Twisted以外的东西,如果是,为什么?

1 个答案:

答案 0 :(得分:1)

如果你想在Django中使用你的代码,你可以使用Crochet简单地调用你的Twisted,它可以在任何WSGI实现中自动管理反应器的创建,运行和关闭你选择(假设它的行为与普通的Python进程一样,至少)。

显然,在Twisted WSGI容器中运行可能不那么复杂: - )。

查看TReq来发布服务客户端请求也许值得;你的新“线程安全”库仍然有缺点,为每个阻塞客户端绑定一个完整的线程,这是一个非常重要的内存和额外的并发开销,而使用Twisted,你只需要担心几个对象。