Skip to content

Instantly share code, notes, and snippets.

@bmbouter
Created March 12, 2014 19:21
Show Gist options
  • Select an option

  • Save bmbouter/9514324 to your computer and use it in GitHub Desktop.

Select an option

Save bmbouter/9514324 to your computer and use it in GitHub Desktop.
Python external epoll loop example with Proton 0.7 RC
import select
from proton import Message
from proton import Messenger
known_selectables = {}
def epoll_events(sel):
events = 0
if sel.capacity > 0:
events |= select.EPOLLIN
if sel.pending > 0:
events |= select.EPOLLOUT
return events
def update_selectables(my_epoll, m):
while True:
sel = m.selectable()
if sel is None:
break
fileno = sel.fileno()
if not sel.registered:
my_epoll.register(fileno, epoll_events(sel))
known_selectables[fileno] = sel
sel.registered = True
else:
my_epoll.modify(fileno, epoll_events(sel))
if sel.is_terminal:
my_epoll.unregister(fileno)
known_selectables.pop(fileno)
sel.free()
def main():
my_epoll = select.epoll()
m = Messenger()
m.passive = True
msg = Message()
msg.address = "amqp://127.0.0.1/queuename"
msg.body = u"Hello World"
m.put(msg)
while True:
update_selectables(my_epoll, m)
if m.deadline:
epoll_events = my_epoll.poll(timeout=m.deadline)
else:
epoll_events = my_epoll.poll()
if epoll_events:
for fd, eventmask in epoll_events:
sel = known_selectables[fd]
if eventmask & select.EPOLLOUT:
sel.writable()
if eventmask & select.EPOLLIN:
sel.readable()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment