Skip to content

Instantly share code, notes, and snippets.

@notedit
Created August 25, 2011 03:45
Show Gist options
  • Save notedit/1169932 to your computer and use it in GitHub Desktop.
Save notedit/1169932 to your computer and use it in GitHub Desktop.
gevent-multiprocess
import sys
from gevent import server
from gevent.monkey import patch_all; patch_all()
from multiprocessing import Process, current_process, cpu_count
def note(format, *args):
sys.stderr.write('[%s]\t%s\n' % (current_process().name, format%args))
def echo(socket, address):
print 'New connection from %s:%s' % address
fileobj = socket.makefile()
fileobj.write('Welcome to the echo server! Type quit to exit.\r\n')
fileobj.write('In %s\r\n' % current_process().name)
fileobj.flush()
while True:
line = fileobj.readline()
if not line:
print "client disconnected"
break
if line.strip().lower() == 'quit':
print "client quit"
break
fileobj.write(current_process().name + '\t' + line)
fileobj.flush()
print "echoed", repr(line)
s = server.StreamServer(('127.0.0.1', 8001), echo)
s.pre_start()
def serve_forever(server):
note('starting server')
try:
server.start_accepting()
try:
server._stopped_event.wait()
except:
raise
except KeyboardInterrupt:
pass
number_of_processes = 5
print 'Starting %s processes' % number_of_processes
for i in range(number_of_processes):
Process(target=serve_forever, args=(s,)).start()
s.serve_forever()
@jamiesun
Copy link

jamiesun commented Sep 8, 2012

class GEventServer():
""" gevent wsgi服务器定义,可利用多进程
"""
def init(self,handler,host,port):
self.handler = handler
self.host = host
self.port = port

def start(self):
    from multiprocessing import Process
    from gevent import monkey
    monkey.patch_socket()
    monkey.patch_os()
    from gevent.wsgi import WSGIServer
    server = WSGIServer((self.host, self.port), self.handler)
    server.pre_start()
    def serve_forever():
        print 'starting server'
        try:
            server.start_accepting()

            try:
                server._stopped_event.wait()
            except:
                raise
        except KeyboardInterrupt:
            pass                
    for i in range(2):
        Process(target=serve_forever, args=tuple()).start()
    serve_forever()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment