【发布时间】:2016-03-04 17:16:47
【问题描述】:
我正在使用 django 框架并遇到了一些性能问题。
在我的views.py中有一个非常重的(大约需要2秒)。我们称之为heavy()。
客户端使用ajax发送请求,路由到heavy(),等待json响应。
不好的是,我认为heavy() 不是并发的。如下图所示,如果有两个请求同时路由到heavy(),则必须等待另一个。换句话说,heavy() 是串行的:在从当前请求返回之前,它不能接受另一个请求。该观察结果在我的本地机器上进行了测试和验证。
我正在尝试制作views.pyconcurrent 和asynchronous 中的函数。理想情况下,当有两个请求到达heavy() 时,heavy() 应该通过回调将作业丢给远程工作人员,然后返回。然后,heavy() 可以处理另一个请求。任务完成后,回调可以将结果发送回客户端。逻辑如下:
但是有一个问题:如果heavy()要处理另一个请求,它必须返回;但如果它返回一些东西,django 框架会向客户端发送一个(假)响应,而客户端可能不会等待另一个响应。此外,虚假响应不包含正确的数据。我已经搜索了 stackoverflow 并找到了不太有用的提示。我想知道是否有人尝试过这个并且知道解决这个问题的好方法。
谢谢,
【问题讨论】:
-
您使用的是什么服务器? Django 开发服务器?
标签: django multithreading asynchronous concurrency celery