首先,我查看了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)
是你唯一想异步执行的部分吗? - Thomasrun_in_executor
来推进迭代器对象。因此,在循环中await
loop.run_in_executor(None, next, it)
可以相当接近所需的行为。 - vaultahiter_messages = iter(my_iter);while 1:;i = await loop.run_in_executor(None, next, iter_messages)
。 - muddyfish