On Wed, Aug 29, 2012 at 10:18:59AM -0700, Ben Pfaff wrote:
> On Tue, Aug 28, 2012 at 05:37:06PM +0900, Isaku Yamahata wrote:
> > On Mon, Aug 27, 2012 at 10:10:13PM -0700, Ben Pfaff wrote:
> > > On Wed, Aug 22, 2012 at 07:07:05PM +0900, Isaku Yamahata wrote:
> > > > eventlet/gevent doesn't work well with select.poll because it blocks.
> > > > So ovsdb python binding can't be used with eventlet/gevent.
> > > > So monkey patch to select.poll with a function that emulate select.poll
> > > > with select.select.
> > > >
> > > > Signed-off-by: Isaku Yamahata <[email protected]>
> > >
> > > What's going to use this?
> >
> > My motivation is to use ovsdb python binding in openstack quantum which
> > uses eventlet (I have Ryu plugin in mind, but I think other plugin can
> > benefit) and in Ryu which uses gevent.
>
> Hmm. Depending on the way that the code is structured, you might be
> able to just pass an object of a different class that simply implements
> fd_wait, timer_wait, timer_wait_until, and immediate_wake differently.
> Did you consider that solution? Or we could define an abstract
> superclass for Poller with the current Poller as the default concrete
> definition. I'd be open to that, if it would help.
Then I'd like to introduce an abstract superclass.
How about this?
abstract
class _SelectPollBase(object):
__metaclass__ = ABCMeta
@abstractmethod
def register(self, fd, events):
pass
@abstractmethod
def poll(self, timeout):
pass
class _SelectPoll(_SelectPollBase):
def register(self, fd, events):
select.poll(fd, events)
def poll(self, timeout):
select.pol(timetout)
class _SelectSelect(_SelectPollBase):
....
SelectPoll = _SelectPoll
# if eventlet/gevent: SelectPoll = _SelectSelect
class Poller(object)
def __init__(self, select_poll=SelectPoll):
self.select_poll = select_poll
...
I should have state the issue clearly. The issues is NOT how to use
*_wait. The issues is that select.poll with eventlet/gevent blocks
python interpreter as a whole due to the eventlet/gevent implementation
details. So the all execution of green-threads are blocked instead of
switching to runnable thread.
--
yamahata
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev