python3.4 环境
- 任务 1 往 queue 每隔 2s 塞一个数据
- 任务 2 使用一个循环, 1s 超时获取 queue 数据。
现象: 任务 2 一直得不到数据。, 从原则上说,这把 get()超时了,只要 put()过了,下一把 get 怎么也能得到数据。但就是没有数据,一直超时。
任务 2 为什么不一直 yield from queue.get()呢?一直 yield from 当然可以得到,问题就是这个 asyncio.wait_for()超时会得不到, timeout=1 得不到, timeout=0.5 是 ok 的, >2 是 ok 的,=2 也是得不到的。
import asyncio
#from queues import Queue
class Test:
def __init__(self, loop=None):
self._queue = asyncio.Queue(loop=loop)
self._future = asyncio.Future(loop=loop)
@asyncio.coroutine
def run(self):
asyncio.async(self._feed_queue(2))
asyncio.async(self._recv())
@asyncio.coroutine
def _feed_queue(self, interval):
v = 0
while True:
yield from asyncio.sleep(interval)
print("feed")
yield from self._queue.put(v)
v = v+1
# print("%s" % repr(self._queue))
@asyncio.coroutine
def _recv(self):
while True:
# print('wait')
try:
r = yield from asyncio.wait_for(self._queue.get(), timeout=1.0)
print(">>>>>>>>>>>>>>>",r)
except asyncio.TimeoutError:
print("timeout")
continue
except:
break
print("quit")
loop = asyncio.get_event_loop()
t = Test(loop=loop)
asyncio.async(t.run())
loop.run_forever()