您的位置:首页 > 其它

flask学习之路(一)

2015-07-07 20:12 399 查看
安装flask

pip install flask 非常方便

我的python是2.7.9 32位包,flask版本是:

C:\Users\jack-z>pip show flask

---

Metadata-Version: 1.1

Name: Flask

Version: 0.10.1

Summary: A microframework based on Werkzeug, Jinja2 and good intentions

Home-page: http://github.com/mitsuhiko/flask/
Author: Armin Ronacher

Author-email: armin.ronacher@active-4.com

License: BSD

Location: c:\python27\lib\site-packages

Requires: Werkzeug, Jinja2, itsdangerous

------------------------------------------------------------------------------------------------------------------------------------------------------------------

测试flask入门代码

from flask import Flask, jsonify
import time

app = Flask(__name__)

tasks = [
{
'id': 1,
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}
]

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
# time.sleep(60000)
return jsonify({'tasks': tasks})

@app.route('/', methods=['GET'])
def hellword():
# time.sleep(60000)
return "hello world!"

@app.route('/projects/')
def projects():
return 'The project page'

@app.route('/about')
def about():
return 'The about page'

if __name__ == '__main__':
app.run(host = '0.0.0.0', threaded=True)


app.run(host='0.0.0.0',threaded=True)

host='0.0.0.0' 是其他机子也可以访问

threaded=True 是多线程模式

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

还自己写了测试代码:

# -*- coding:utf-8 -*-

import pycurl
import cStringIO
import threading

def itestMain():
while True:
buf0 = cStringIO.StringIO()
c0 = pycurl.Curl()

try:
# data = 'params={"data":{"jszh":"422324198511172810","dabh":"330105011812"},"code":0,"msg":""}'

c0.setopt(c0.URL, 'http://127.0.0.1:5000/todo/api/v1.0/tasks')
c0.setopt(c0.CONNECTTIMEOUT, 5)
c0.setopt(c0.TIMEOUT, 60)
c0.setopt(c0.WRITEFUNCTION, buf0.write)
# c0.setopt(c0.POSTFIELDS, data)
c0.perform()
except Exception,e:
# c0.close()
pass
        try:
response_body = buf0.getvalue()
print '返回结果:',response_body
except Exception,e:
# c0.close()
pass
buf0.close()
c0.close()

class itestQueryThread(threading.Thread):
def run(self):
itestMain()

def Main():
for i in range(100):
Obj = itestQueryThread()
Obj.start()

if __name__ == '__main__':
Main()
while True:
import time
time.sleep(10)


使用了pycurl来测试flask代码。

=================================================================================================

Apache的ab工具也可以测试压力,这个工具还不错,可以一用,先安装Apache。

----------------


ab的参数详细解释

普通的测试,使用-c -n参数配合就可以完成任务

格式: ./ab [options] [http://]hostname[:port]/path

参数:

-n 测试的总请求数。默认时,仅执行一个请求

-c 一次并发请求个数。默认是一次一个。

-H 添加请求头,例如 ‘Accept-Encoding: gzip’,以gzip方式请求。

-t 测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。

-p 包含了需要POST的数据的文件.

-T POST数据所使用的Content-type头信息。

-v 设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。

-w 以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。

-i 执行HEAD请求,而不是GET。

-C -C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。

参考http://go2linux.garron.me/linux/2010/04/how-benchmark-stress-your-apache-nginx-or-iis-server-718
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: