Meinheld

异步 WSGI Web 服务器
授权协议 BSD
开发语言 Python
所属分类 服务器软件、 应用服务器
软件类型 开源软件
地区 不详
投 递 者 古起运
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Meinheld 是一个高性能的异步 WSGI Web 服务器。是一个兼容 WSGI 的服务器,支持 PEP333 和 PEP3333 规范。Meinheld 利用 greenletPicoev 实现异步 I/O。

Meinheld 要求 Python 2.x >= 2.6 或者 Python 3.x >= 3.2 ,同时要求 greenlet >= 0.4.5。支持 Linux, FreeBSD, Mac OS X. 也可以通过 Gunicorn 来提供服务。

示例代码:

from meinheld import server
 
def hello_world(environ, start_response):
    status = '200 OK'
    res = "Hello world!"
    response_headers = [
        ('Content-type','text/plain'),
        ('Content-Length',str(len(res)))]
    start_response(status, response_headers)
    return [res]
 
server.listen(("0.0.0.0", 8000))
server.run(hello_world)
  • Running: uvicorn asgiproj.asgi:application -b 127.0.0.1:8001 [erm@fezzan ~]$ wrk -d20s -t10 -c200 http://127.0.0.1:8001/asgi/ Running 20s test @ http://127.0.0.1:8001/asgi/   10 threads and 200 connec

  • configm.py: # -*-coding:utf-8 -*- __author__ = "ZJL" import multiprocessing # 监听本机的5000端口 bind = '0.0.0.0:5000' preload_app = True # 开启进程 # workers=4 workers = multiprocessing.cpu_count() * 2 + 1

  •   XYM个人博客对应篇章 meinheld + gunicorn + flask 是神器啊,小小研究了一下。 【Coroutine】 Coroutine:协程,又称微线程,纤程。 协程的这种“挂起”和“唤醒”机制实质上是将一个过程切分成了若干个子过程,给了我们一种以扁平的方式来使用事件回调模型。优点:共享进程的上下文,一个进程可以创建百万,千万的coroutine。 python中的yield和

  • XYM个人博客对应篇章 meinheld + gunicorn + flask 是神器啊,小小研究了一下。 【Coroutine】 Coroutine:协程,又称微线程,纤程。 协程的这种“挂起”和“唤醒”机制实质上是将一个过程切分成了若干个子过程,给了我们一种以扁平的方式来使用事件回调模型。优点:共享进程的上下文,一个进程可以创建百万,千万的coroutine。 python中的yield和第三

  • config.py(gunicorn+gevent): # -*-coding:utf-8 -*- __author__ = "ZJL" import gevent.monkey import multiprocessing gevent.monkey.patch_all() # 监听本机的5000端口 bind = '0.0.0.0:5000' preload_app = True

  • 测试环境: 客户端虚拟机配置:cpu:1c2t  ; os :centos 7 ;Mem:4GB 服务器虚拟机配置:cpu:2c4t  ; os :centos 7 ;Mem:4GB   测试结果: 服务端gunicorn启动命令:   gunicorn -w 2 -b 0.0.0.0:8080 run:app --error-logfile - --worker-class egg:meinhe

 相关资料
  • 异步Tcp客户端 异步Http客户端 异步Redis客户端 异步Mysql客户端 异步Log日志 异步文件读写 异常Exception

  • 异步Log日志 use AsyncLog; yield AsyncLog::info('hello world'); yield AsyncLog::debug('test debug', ['foo' => 'bar']); yield AsyncLog::notice('hello world',[], 'group.com'); yield Async

  • 异常Exception 以传统的try,catch抓取异常 如果在业务层不catch,框架层会捕捉,并返回一个500的server error响应。 如果在开发环境会返回一个500的具体错误的trace响应。 try { throw new \Exception("Error Processing Request", 1); //yield throwExc

  • 异步文件读写 读文件 use AsyncFile; $content = (yield AsyncFile::read(__ROOT__."runtime/test.txt")); 写文件 $res = (yield AsyncFile::write(__ROOT__."runtime/test.txt", "hello wordls!")); $res = (yi

  • 异步Mysql客户端 AsyncMysql::query($sql, $usePool = true) 第二个参数设为false将不会使用连接池中的资源,默认都会从连接池中取,配置连接池数量 => config/database.php 具体使用 use AsyncMysql; //设置超时时间 AsyncMysql::setTimeout(2); $res = (

  • 异步Redis客户端 连接池(连接池默认开启) use AsyncRedis; //关闭连接池 AsyncRedis::enablePool(false); //开启连接池 AsyncRedis::enablePool(true); 使用AsyncRedis use AsyncRedis; //设置超时时间 AsyncRedis::s

  • 异步Http客户端 Get方式 1.使用域名形式 use AsyncHttp; //直接使用域名, get方式 $http = new AsyncHttp('http://groupco.com'); //设置2s超时 $http->setTimeout(2); //$http->setCookies(['token' => 'xxxx']);

  • 异步Tcp客户端 串行发包 use AsyncTcp; $tcp = new AsyncTcp('127.0.0.1', 9501); $tcp->setTimeout(2); //串行发送 $res = (yield $tcp->call('hello server!')); $res = (yield $tcp->call('hello serv