python Gunicorn服务器使用方法详解


Posted in Python onJuly 22, 2019

1. 简介

Gunicorn(Green Unicorn)是给Unix用的WSGI HTTP 服务器,它与不同的web框架是非常兼容的、易安装、轻、速度快。

python Gunicorn服务器使用方法详解

2. 示例代码1

def app(environ, start_response):
  data = b"Hello World\n"
  start_response("200 OK", [
    ("Content-Type", "test/plain"),
    ("Content-Length", str(len(data)))
  ])
  return iter([data])

启动

gunicorn -w 4 myapp:app

起来后显示

[2016-12-12 00:20:12 +0000] [11755] [INFO] Starting gunicorn 19.6.0
[2016-12-12 00:20:12 +0000] [11755] [INFO] Listening at: http://127.0.0.1:8000 (11755)
[2016-12-12 00:20:12 +0000] [11755] [INFO] Using worker: sync
[2016-12-12 00:20:12 +0000] [11760] [INFO] Booting worker with pid: 11760
[2016-12-12 00:20:12 +0000] [11761] [INFO] Booting worker with pid: 11761
[2016-12-12 00:20:12 +0000] [11762] [INFO] Booting worker with pid: 11762
[2016-12-12 00:20:12 +0000] [11763] [INFO] Booting worker with pid: 11763

此时,调用http://127.0.0.1:8000

$curl http://127.0.0.1:8000
Hello World

参数说明

-w 处理HTTP请求的worker进程数,以下两种启动方式等价

gunicorn -w 4 myapp:app
gunicorn --workers=4 myapp:app

参考:

-w INT, --workers INT
            The number of worker processes for handling requests.

问题:为何调用 http://ip:8000不行呢, 这个是什么请求呢?

默认有-b参数,参考

-b ADDRESS, --bind ADDRESS
            The socket to bind. [['127.0.0.1:8000']]

以下方式启动就可以用ip的方式启动了

sudo gunicorn -w 2 -b 0.0.0.0:4000 myapp:app

3. 示例代码2

之前简单的flask方法

from flask import Flask
app = Flask(__name__)

@app.route('/hello.world')
def check():
  return 'hello world!'


if __name__ == '__main__':
  app.run()

启动

$sudo gunicorn -b 0.0.0.0:300 -w 4 myapp3:app
[2016-12-18 19:19:51 +0000] [21005] [INFO] Starting gunicorn 19.6.0
[2016-12-18 19:19:51 +0000] [21005] [INFO] Listening at: http://0.0.0.0:300 (21005)
[2016-12-18 19:19:51 +0000] [21005] [INFO] Using worker: sync
[2016-12-18 19:19:51 +0000] [21010] [INFO] Booting worker with pid: 21010
[2016-12-18 19:19:51 +0000] [21011] [INFO] Booting worker with pid: 21011
[2016-12-18 19:19:51 +0000] [21014] [INFO] Booting worker with pid: 21014
[2016-12-18 19:19:51 +0000] [21017] [INFO] Booting worker with pid: 21017

测试

$curl localhost:300/hello.world
hello world!

4. 启动异常

[ERROR] Connection in use: ('127.0.0.1', 8000)

原因之一是之前启动的进程没有杀死。

注:ctrl+z 是挂起进程,但没有终止。ctrl+c是终止进程。

如果使用了ctrl+z再回到进程中可使用fg命令,这样可以用ctrl+c来关闭进程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python实现判断字符串中包含某个字符的判断函数示例
Jan 08 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
Python 创建空的list,以及append用法讲解
May 04 Python
新年福利来一波之Python轻松集齐五福(demo)
Jan 20 Python
python中的 zip函数详解及用法举例
Feb 16 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 Python
python实现按行分割文件
Jul 22 #Python
python UDP(udp)协议发送和接收的实例
Jul 22 #Python
linux环境下Django的安装配置详解
Jul 22 #Python
python判断一个对象是否可迭代的例子
Jul 22 #Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 #Python
python实现大文件分割与合并
Jul 22 #Python
cProfile Python性能分析工具使用详解
Jul 22 #Python
You might like
一个程序下载的管理程序(二)
2006/10/09 PHP
php文件缓存方法总结
2016/03/16 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
django中的ajax组件教程详解
2018/10/18 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JS中Location使用详解
2015/05/12 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
Python shelve模块实现解析
2019/08/28 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
django 取消csrf限制的实例
2020/03/13 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
C#面试题
2016/05/06 面试题
质检部经理岗位职责
2014/02/19 职场文书
高中生班主任评语
2014/04/25 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python