Created
January 12, 2011 16:12
-
-
Save tmc/776364 to your computer and use it in GitHub Desktop.
simple multiprocessing gevent echo server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from gevent import server | |
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 = cpu_count() - 1 | |
print 'Starting %s processes' % number_of_processes | |
for i in range(number_of_processes): | |
Process(target=serve_forever, args=(s,)).start() | |
s.serve_forever() |
hi traviscline when i run your code i came to this error
Process Process-1: Traceback (most recent call last): File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap self.run() File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run self._target(*self._args, **self._kwargs) File "gistfile1.py", line 33, in serve_forever server.start_accepting() File "build/bdist.linux-i686/egg/gevent/server.py", line 99, in start_accepting self._accept_event = core.read_event(self.socket.fileno(), self._do_accept, persist=True) File "core.pyx", line 308, in gevent.core.read_event.__init__ (gevent/core.c:3960) File "core.pyx", line 252, in gevent.core.event.add (gevent/core.c:2952) IOError: [Errno 17] File exists
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sorry. Should have pointed out that I was using gevent tip. Haven't tracked down the revision but this was fixed since 0.13