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 相关文章推荐
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python实现数据库编程方法详解
Jun 09 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
python读取文件名称生成list的方法
Apr 27 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
Python如何读取文件中图片格式
Jan 13 Python
Python while循环使用else语句代码实例
Feb 07 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
php session_decode函数用法讲解
2019/05/26 PHP
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
Node.js使用Angular简单示例
2018/05/11 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
Python实现定时精度可调节的定时器
2018/04/15 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
python中os包的用法
2020/06/01 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
简短的公司员工自我评价分享
2013/11/13 职场文书
求职自荐信
2013/12/14 职场文书
党章学习思想汇报
2014/01/14 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
公司奖励通知
2015/04/21 职场文书
儿童诗两首教学反思
2016/02/23 职场文书