起初,我认为Bottle会同时处理请求,所以我写了下面的测试代码:
import json
from bottle import Bottle, run, request, response, get, post
import time
app = Bottle()
NUMBERS = 0
@app.get("/test")
def test():
id = request.query.get('id', 0)
global NUMBERS
n = NUMBERS
time.sleep(0.2)
n += 1
NUMBERS = n
return id
@app.get("/status")
def status():
return json.dumps({"numbers": NUMBERS})
run(app, host='0.0.0.0', port=8000)
Run Code Online (Sandbox Code Playgroud)
然后我用jmeter请求/test10个线程循环20次的url.
在那之后,/status给我{"numbers": 200},看起来那瓶不同时处理请求.
我误解了什么吗?
UPDATE
我做了另一个测试,我认为它可以证明瓶子一个接一个地处理请求(没有并发).我对这个test功能做了一些改动:
@app.get("/test")
def test():
t1 = time.time()
time.sleep(5)
t2 = time.time()
return {"t1": t1, "t2": t2}
Run Code Online (Sandbox Code Playgroud)
当我/test在浏览器中访问两次时,我得到:
{
"t2": 1415941221.631711,
"t1": 1415941216.631761
}
{
"t2": 1415941226.643427,
"t1": 1415941221.643508
}
Run Code Online (Sandbox Code Playgroud)
Max*_*oel 15
并发不是您的Web框架的功能 - 它是您用来服务它的Web服务器的功能.由于Bottle符合WSGI,因此意味着您可以通过任何WSGI服务器提供Bottle应用程序:
后两者可以提供大量的同时连接.
根据http://bottlepy.org/docs/dev/api.html,如果没有给出具体说明,请bottle.run使用wsgiref为您的应用程序提供服务,这解释了为什么它只能一次处理一个请求.
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |