Skip to content

Instantly share code, notes, and snippets.

@denik
Forked from notedit/gevent-multiprocess.py
Created August 25, 2011 04:24
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save denik/1169975 to your computer and use it in GitHub Desktop.
Save denik/1169975 to your computer and use it in GitHub Desktop.
gevent-multiprocess
import sys
from gevent import server
from gevent.baseserver import _tcp_listener
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)
listener = _tcp_listener(('127.0.0.1', 8001))
def serve_forever(listener):
note('starting server')
server.StreamServer(listener, echo).serve_forever()
number_of_processes = 5
print 'Starting %s processes' % number_of_processes
for i in range(number_of_processes):
Process(target=serve_forever, args=(listener,)).start()
serve_forever(listener)
@pokstad
Copy link

pokstad commented Sep 13, 2011

Do you have an example of something similar for pywsgi? It'd be great to use gevent without gunicorn and take advantage of multiple processes!

@andrew-azarov
Copy link

It says it's 5 processes but eventually it will be 6 because you start the main in the end...
What's the difference between just forking with gevent.hubs?

@whatvn
Copy link

whatvn commented Apr 4, 2014

I'm using gevent 1.0 on Mac Maverick, there's no _tcp_listener for gevent.baseserver, do you know why?

@lithammer
Copy link

It has been moved to gevent.server in v1.0, so:

-from gevent.baseserver import _tcp_listener
+from gevent.server import _tcp_listener

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