有一次,我的Django应用需要加载一个自己的页面来渲染另一个页面。我正在尝试使用urllib2(使用Python 2.6)来加载页面,但似乎阻止了较新的请求,直到前者完成。
这是Django在调试模式下只使用一个线程的问题吗? (我只使用默认的python manage.py runserver
运行它)。是否有一种简单的方法要求它进行多线程?
答案 0 :(得分:6)
真的没有办法让dev服务器成为多线程。 django项目中有open ticket about this几年,还有一个补丁(你可以尝试实现它是否适合你;-))。票证一直关闭或推迟到“需要设计决策”,因为项目不希望人们使用管理服务器进行部署......如果它是多线程的,它们可能“在紧急情况下”。管理服务器效率不高,也没有收紧安全性,因此任何人可能运行生产环境的机会都是非常危险的......让django安装世界而不是为安全性差而建立声誉也无济于事 - )< / p>
我个人的经验是运行一个本地Apache实例,就像我的生产环境一样,用来测试AJAX或其他你可能会收到并发请求的场景。
在您的情况下,由于您只是在查找请求的结果并且您可以访问服务器代码,因此我建议您进行一些重构,以便您可以获得该页面输出的结果,而无需通过HTTP调用该页面。编写一个返回实际结果的函数,让普通的HTTP视图只调用该函数。这样,任何其他应用程序代码也可以调用该函数,而无需进行服务器往返。
答案 1 :(得分:2)
不要尝试将http用于自身。即使你让它运行(可能在真正的服务器上工作,而不是在测试中);这将非常低效。视图只是Python函数,请调用它们!
当然,更好的是拥有一个理智的模型和一个可以在两个视图上使用的单独的模板片段。
答案 2 :(得分:1)
为什么不使用render_to_string
?
答案 3 :(得分:0)