Skip to content

Instantly share code, notes, and snippets.

@bremac
Created March 12, 2012 06:52
Show Gist options
  • Save bremac/2020366 to your computer and use it in GitHub Desktop.
Save bremac/2020366 to your computer and use it in GitHub Desktop.
Handling client requests with workers using gevent
import gevent
from gevent.event import AsyncResult
import gevent.pool
import gevent.queue
class WorkerQueue(object):
def __init__(self):
self.group = gevent.pool.Group()
self.q = gevent.queue.Queue()
def delegate(self, timeout=None, *request):
result = AsyncResult()
self.q.put((result, request))
return result.get(timeout)
def spawn_worker(self, worker):
def worker_():
while True:
result, request = self.q.get()
try:
result_ = worker(*request)
result.set(result_)
except Exception as e:
result.set_exception(e)
self.group.spawn(worker_)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment