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 hidden or 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() |
Author
Sorry. Should have pointed out that I was using gevent tip. Haven't tracked down the revision but this was fixed since 0.13
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
Hi, traviscline,
When I download and run it on my server, I got this Exception:
~/python $ python gistfile1.py
Starting 3 processes [Process-1] starting server [Process-2] starting server Process Process-2: Traceback (most recent call last): File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap [Process-3] starting server self.run() Traceback (most recent call last): File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run File "gistfile1.py", line 46, in self._target(*self._args, **self._kwargs) s.serve_forever() File "gistfile1.py", line 33, in serve_forever File "/usr/lib64/python2.6/site-packages/gevent-0.13.1-py2.6-linux-x86_64.egg/gevent/baseserver.py", line 178, in serve_forever self.start() server.start_accepting() File "/usr/lib64/python2.6/site-packages/gevent-0.13.1-py2.6-linux-x86_64.egg/gevent/baseserver.py", line 142, in start File "/usr/lib64/python2.6/site-packages/gevent-0.13.1-py2.6-linux-x86_64.egg/gevent/server.py", line 91, in start_accepting self.start_accepting() File "/usr/lib64/python2.6/site-packages/gevent-0.13.1-py2.6-linux-x86_64.egg/gevent/server.py", line 91, in start_accepting Process Process-3: self._accept_event = core.read_event(self.socket.fileno(), self._do_accept, persist=True) Traceback (most recent call last): File "core.pyx", line 331, in gevent.core.read_event.__init__ (gevent/core.c:3912) self._accept_event = core.read_event(self.socket.fileno(), self._do_accept, persist=True) File "core.pyx", line 331, in gevent.core.read_event.__init__ (gevent/core.c:3912) File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap File "core.pyx", line 277, in gevent.core.event.add (gevent/core.c:3049) self.run() IOError: File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run event_add(fileno=3) returned -1 self._target(*self._args, **self._kwargs) File "gistfile1.py", line 33, in serve_forever server.start_accepting() File "/usr/lib64/python2.6/site-packages/gevent-0.13.1-py2.6-linux-x86_64.egg/gevent/server.py", line 91, in start_accepting self._accept_event = core.read_event(self.socket.fileno(), self._do_accept, persist=True) File "core.pyx", line 331, in gevent.core.read_event.__init__ (gevent/core.c:3912) File "core.pyx", line 277, in gevent.core.event.add (gevent/core.c:3049) IOError: event_add(fileno=3) returned -1 File "core.pyx", line 277, in gevent.core.event.add (gevent/core.c:3049) IOError: event_add(fileno=3) returned -1My enviroment is Gentoo Linux for x64, Python 2.6.6, Gevent 0.13.1
freewindwu