【发布时间】:2017-08-27 20:49:21
【问题描述】:
首先,我查看了this、this 和this,虽然第一个有一些有用的信息,但这里不相关,因为我正在尝试迭代值。
这是我想做的事情的一个例子:
class BlockingIter:
def __iter__(self):
while True:
yield input()
async def coroutine():
my_iter = BlockingIter()
#Magic thing here
async for i in my_iter:
await do_stuff_with(i)
我该怎么办?
(请注意,BlockingIter 实际上是我正在使用的库 (chatexchange),因此可能存在一些其他问题。)
【问题讨论】:
-
你能在这里多说一下你想要的行为吗:
do_stuff_with(i)是你想要异步完成的唯一部分吗? -
不,我正在使用 asyncio 作为基础的框架,我必须使用它
-
嗯,你可以使用
run_in_executor来推进一个迭代器对象。所以awaitingloop.run_in_executor(None, next, it)在一个循环中会相当接近所需的行为。 -
@vaultah 可以,谢谢!如果你想写一个答案,最后的代码是
iter_messages = iter(my_iter);while 1:;i = await loop.run_in_executor(None, next, iter_messages) -
我认为更好的问题是“我如何异步获取用户输入”
标签: python iterator python-asyncio