Created
January 20, 2016 08:47
-
-
Save alexcpn/48bcf43ac6d7c98f053d to your computer and use it in GitHub Desktop.
A gevent,greenlet based simple TaskQueue
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
# Gevent Queue | |
from gevent import queue | |
import gevent | |
from enum import Enum | |
import time | |
import threading | |
class EventId(Enum): | |
event_added = 1 | |
event_moving = 2 | |
event_removed = 3 | |
event_reconnected = 4 | |
class EventHandler(object): | |
""" | |
Runs a Gevent Queue and manages the supported eventEvents, using the rules codified | |
""" | |
def __init__(self, queue): | |
""" | |
:param queue: The Gevent queue on which to work till the process dies | |
:return: | |
""" | |
self.queue = queue | |
for i in range(2): | |
gevent.spawn(self.queue_worker) | |
def do_work(self, item_in_queue): | |
print "#Doing some work Event=",item_in_queue[0],"Event data=",item_in_queue[1] | |
def queue_worker(self): | |
while True: | |
item = self.queue.get() | |
self.do_work(item) | |
def push_to_queue(queue,start,stop): | |
for item in range(start,stop): | |
queue.put((EventId.event_added,item)) | |
gevent.sleep(0) | |
queue = queue.Queue() | |
handler = EventHandler(queue) | |
gevent.spawn(push_to_queue,queue,1,10) | |
gevent.spawn(push_to_queue,queue,11,20) | |
shutdown = False | |
starttime = time.time() | |
while not shutdown: | |
gevent.sleep(.1) | |
if time.time() - starttime > 3: | |
shutdown = True | |
print "Wait over" | |
#Doing some work Event= EventId.event_added Event data= 1 | |
#Doing some work Event= EventId.event_added Event data= 11 | |
#Doing some work Event= EventId.event_added Event data= 2 | |
#Doing some work Event= EventId.event_added Event data= 12 | |
#Doing some work Event= EventId.event_added Event data= 3 | |
#Doing some work Event= EventId.event_added Event data= 13 | |
#Doing some work Event= EventId.event_added Event data= 4 | |
#Doing some work Event= EventId.event_added Event data= 14 | |
#Doing some work Event= EventId.event_added Event data= 5 | |
#Doing some work Event= EventId.event_added Event data= 15 | |
#Doing some work Event= EventId.event_added Event data= 6 | |
#Doing some work Event= EventId.event_added Event data= 16 | |
#Doing some work Event= EventId.event_added Event data= 7 | |
#Doing some work Event= EventId.event_added Event data= 17 | |
#Doing some work Event= EventId.event_added Event data= 8 | |
#Doing some work Event= EventId.event_added Event data= 18 | |
#Doing some work Event= EventId.event_added Event data= 9 | |
#Doing some work Event= EventId.event_added Event data= 19 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment