use*_*003 6 python django sleep
使用Django(由Webfaction托管),我有以下代码
import time
def my_function(request):
time.sleep(10)
return HttpResponse("Done")
Run Code Online (Sandbox Code Playgroud)
当我访问我的网址www.mysite.com时,这是通过Django执行的
我两次之后立即输入网址.我看到它的方式,这些都应该在10秒后完成.但是,第二个呼叫等待第一个呼叫,并在20秒后结束.
但是,如果我输入一些虚拟GET参数,www.mysite.com?dummy=1和www.mysite.com?dummy=2那么它们都会在10秒后完成.因此它们可以同时运行.
就好像sleep()的范围在某种程度上是全局的?也许输入一个参数使它们作为不同的进程运行而不是相同的???
它由Webfaction托管.httpd.conf有:
KeepAlive Off
Listen 30961
MaxSpareThreads 3
MinSpareThreads 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
Run Code Online (Sandbox Code Playgroud)
我确实需要能够使用sleep()并相信它并没有停止一切.那么,它是什么以及如何解决它?
编辑:Webfaction使用Apache运行它.
正如Gjordis所指出的,睡眠会暂停当前线程.我看过Webfaction,看起来他们正在使用WSGI来运行Django的服务实例.这意味着,每次请求进入时,Apache都会查看当前正在运行的工作进程数(即每个运行Django实例的进程).如果没有/要查看它将产生额外的工作人员并将请求交给他们.
以下是我认为你的情况:
这种行为在99%的时间内完全有意义,因此在逻辑上这是默认情况下执行此操作.
但是,如果您更改第二个请求所请求的资源(通过添加GET参数),Apache将假设这是一个不同的资源并将启动另一个工作程序(因为第一个已经"忙"(Apache无法知道您是没有做任何艰苦的工作).由于现在有两个工人,两个等待10秒,总时间下降到10秒.