【发布时间】:2014-02-09 17:10:26
【问题描述】:
我将 Django 与 Uwsgi 一起使用。我们有 8 个进程在运行,我没有真正的迹象表明我们的代码是特别线程安全的,因为它从未在设计时考虑到线程。
最近,我们增加了通过各种 API 从服务供应商处获取实时费率并立即向用户显示的功能。问题是这些请求是旧的 Web 服务技术,由于它们的响应时间,从供应商处获得(或放弃)所有费率所需的时间可能长达 10 秒。
这带来了一个问题。我们网站上的流量相当可观,客户需要经常查看这些费率。只有 8 个进程,很容易看出服务器是如何忙于等待这些上游请求的。尤其是当需要进行其他优化以使网站基线更快时(我们正在努力)。
我们为请求的速率创建了一个单独的库(它应该主要是线程安全的,如果不是,应该很容易地转换为它),我们可以分离出它的配置。所以我想用自己的线程创建一个单独的服务,也许在 Twisted 中,让浏览器联系该服务以获得 JSON,而不是让它在主 Django 服务器中运行。
这个解决方案好不好?你能想出更好或更简单的方法吗?我应该使用 Twisted 以外的东西吗?如果是,为什么?
【问题讨论】:
-
异步处理程序看起来恰到好处。不过,Twisted 可能有点矫枉过正。看看 gevent,它很好地与 uWSGI 集成。
-
是什么让一个软件“矫枉过正”? Twisted 不会显着增加大多数 Python 应用程序的磁盘或内存占用。此外,我们仍在制作更多的 Twisted,所以即使是简单的问题也使用它并不意味着每个人都会过早地用完。
-
@Jean-PaulCalderone 一个简单的答案就是学习曲线。
标签: python django multithreading twisted uwsgi