Skip to content

Instantly share code, notes, and snippets.

@denik
denik / gevent-multiprocess.py
Created August 25, 2011 04:24 — forked from notedit/gevent-multiprocess.py
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))
while not process_shutdown: # only process if process_shutdown has not be signalled yet
with process_shutdown:
# means Interrupt will be raised here asynchronously
x = do_something()
# in some other greenlet:
process_shutdown.signal()
@denik
denik / upgrade_example.py
Created August 18, 2011 06:24 — forked from progrium/upgrade_example.py
Upgradable WSGI server websocket example
import gevent.pywsgi
from websocket import WebSocketUpgrader
class UpgradableWSGIHandler(gevent.pywsgi.WSGIHandler):
def handle_one_response(self):
connection_header = self.environ.get('HTTP_CONNECTION', '').lower()
if connection_header == 'upgrade' and self.server.upgrade_handler:
upgrade_header = self.environ.get('HTTP_UPGRADE', '').lower()
handler = self.server.upgrade_handler(upgrade_header, self.environ)
@denik
denik / 1 - testx.pyx
Created August 2, 2011 07:29
Example of cython_ifdef.py
cdef class A:
cdef object member
#ifdef _WIN32
cdef object windows_only_member
#endif
@denik
denik / ServerRack.py
Created June 5, 2011 09:31
class for managing multiple servers in gevent
# Class for managing multiple servers or anything with start() and stop() methods
class ServerRack(object):
def __init__(self, servers):
self.servers = servers
def start(self):
started = []
try:
@denik
denik / gist:932102
Created April 20, 2011 17:42
make non-yielding functions (a little bit) yielding, so that gevent.Timeout somewhat works
import sys
import signal
import gevent
from gevent import get_hub
import traceback
def alarm_handler(*args):
signal.alarm(1)
if gevent.getcurrent() is not get_hub():
get_hub().loop.update_now()
@denik
denik / good.py
Created September 20, 2010 18:22 — forked from eyeseast/bad.py
### traceback
Traceback (most recent call last):
File "/Users/newshour/code/python/chatterbox/lib/python2.6/site-packages/gevent/greenlet.py", line 405, in run
result = self._run(*self.args, **self.kwargs)
File "/Users/newshour/code/python/chatterbox/lib/python2.6/site-packages/pymongo/collection.py", line 270, in insert
check_keys, safe, kwargs), safe)
File "/Users/newshour/code/python/chatterbox/lib/python2.6/site-packages/pymongo/connection.py", line 601, in _send_message
sock = self.__pool.socket()
File "/Users/newshour/code/python/chatterbox/lib/python2.6/site-packages/pymongo/connection.py", line 147, in socket
# not actually tested
from gevent.queue import Queue
from gevent.pool import Pool
class GreenPile(object):
def __init__(self, size_or_pool=1000):
if isinstance(size_or_pool, Pool):
self.pool = size_or_pool