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
  • 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)
@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