У меня появилась идея, как обернуть очередь и трубу в класс. И затем использование модуля выбора для проверки сокета и канала не будет использовать опрос для мониторинга события.
Следующий пример кода для переноса очереди и конвейера:
class MyQueue(object):
"""docstring for MyQueue"""
def __init__(self, arg):
super(MyQueue, self).__init__()
# self.arg = arg
self._queue = Queue.Queue()
self._rdfd, self._wrfd = os.pipe()
return
def enQ(self, item=None, block=True, timeout=None):
os.write(self._wrfd, '+')
self._queue.put(item)
return
def deQ(self, block=True, timeout=None):
_itm = self._queue.get(block=block, timeout=timeout)
_msg = os.read(self._rdfd, 1)
return _itm
def get_notify(self):
return self._rdfd
print 'append queue'
self.inp.append(self._myq.get_notify())
print 'append socket'
self.inp.append(self.sock)
print self.inp
_slp = self.slp
_inp = self.inp
_out = self.out
_err = self.err
_in, _out, _err = select.select(_inp, _out, _err, _slp)