gevent 多进程(新)

网上找的大部分代码都是过时的,查找gevent源码和CHANGELOG才知道:

  1. pre_start 变为init_socket

  2. _stopped_event变为_stop_event

  3. 每个进程需要gevent.wait

pre_start() method is renamed to init_socket() - renamed _stopped_event to _stop_event 

multi_streamserver.py

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

from gevent import monkey; monkey.patch_os()
from gevent.server import StreamServer
from multiprocessing import Process
import gevent

def eat_cpu(): 
    for i in xrange(10000000):
        pass
 
def connection_handler(socket, address):
    eat_cpu()
    socket.recv(1024)
    socket.sendall('HTTP/1.1 200 OK\n\nHello!')
    socket.close()
    
server = StreamServer(('0.0.0.0', 6000), connection_handler, backlog=100000)
server.init_socket()           # *1
    
def serve_forever():
    server.start_accepting()   # *2
    server._stop_event.wait()  # *3
    gevent.wait()              # *4
    
process_count = 3
processes = []
for i in range(process_count):
    p = Process(target=serve_forever, args=tuple())
    p.start()
    processes.append(p)

try:
    print "main process does nothing!.."
    for p in processes:
        p.join()
except KeyboardInterrupt:
    print "bye"

multi_wsgiserver.py

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

from gevent import monkey; monkey.patch_os()
from gevent.pywsgi import WSGIServer
from multiprocessing import Process
import gevent

def _app(environ, start_response):
    start_response('200 OK', [('Content-Type','text/plain')])
    yield "hello\n"

server = WSGIServer(('0.0.0.0', 6000), _app, backlog=100000, log=None)
server.init_socket()

def serve_forever():
    server.start_accepting()
    server._stop_event.wait()
    gevent.wait()

process_count = 2
processes = []
for i in range(process_count):
    p = Process(target=serve_forever, args=tuple())
    p.start()
    processes.append(p)

try:
    print "main process does nothing!.."
    for p in processes:
        p.join()
    #serve_forever()
except KeyboardInterrupt:
    print "bye"

总结: 1.在普通tcp(multi_streamserver.py)中多进程会降低性能,不建议试用....而在wsgi中确实能成倍提升性能, 这样就不需要gunicorn了
      2.针对wsgi服务: 在主进程里面也运行wsgi服务的话会降低性能,所以只需要开启多个子进程运行wsgi服务,主进程做额外的控制工作

转载于:https://my.oschina.net/1123581321/blog/358070

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值