Python异步循环可以是异步的吗?

Python异步循环可以是异步的吗?,python,asynchronous,Python,Asynchronous,我在幻灯片上看到golang可以这样做: func main() { go boring("Boring!") fmt.Println("I'm listening.") time.Sleep(2 * time.Second) fmt.Println("You're boring; I'm leaving.") } 结果是这样的 I'm listening. boring 0 boring 1 boring 2 boring 3 boring 4 boring

我在幻灯片上看到golang可以这样做:

func main() {
    go boring("Boring!")
    fmt.Println("I'm listening.")
    time.Sleep(2 * time.Second)
    fmt.Println("You're boring; I'm leaving.")
}
结果是这样的

I'm listening.
boring 0
boring 1
boring 2
boring 3
boring 4
boring 5
You're boring; I'm leaving.
Python异步循环可以这样做吗?我被困在
循环中。永远运行_
,它将阻止主功能:

import asyncio
import random
import time
import itertools


async def boring(msg):
    for i in itertools.count(0):
        print(msg, i)
        await asyncio.sleep(random.random() % 1e3)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    asyncio.ensure_future(boring('boring!'))
    loop.run_forever()
    print('Hello')
    time.sleep(2)
    print('Bye.')
    loop.stop()
然后它将运行

boring! 0
boring! 1
boring! 2
boring! 3
boring! 4
boring! 5
boring! 6
boring! 7
boring! 8
boring! 9
python异步循环可以是异步的吗?

循环。如果阻止执行,请永远运行(
)。由于代码在单个线程中运行,您需要将代码修改为以下内容:

async def boring(msg):
    for i in itertools.count(0):
        print(msg, i)
        await asyncio.sleep(random.random() % 1e3)

async def hello(task):
    print('Hello')
    await asyncio.sleep(2)
    print('Bye.')
    task.cancel()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    t = asyncio.ensure_future(boring('boring!'))
    loop.run_until_complete(hello(t))
    loop.stop()
loop.run_forever()
如果阻止执行。由于代码在单个线程中运行,您需要将代码修改为以下内容:

async def boring(msg):
    for i in itertools.count(0):
        print(msg, i)
        await asyncio.sleep(random.random() % 1e3)

async def hello(task):
    print('Hello')
    await asyncio.sleep(2)
    print('Bye.')
    task.cancel()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    t = asyncio.ensure_future(boring('boring!'))
    loop.run_until_complete(hello(t))
    loop.stop()

谢谢你的回复,我被困在最后一篇关于Python中异步的文章上了。如果我想在Python中使用async,这是否意味着我将以循环结束我的程序。要执行异步函数,您需要一个
run\u直到\u complete
run\u forever
调用,该调用将暂时阻止线程,然后继续正常进程。在某一点上,您必须将线程的控制权交给
EventLoop
,以便它可以管理异步内容。您可以将
循环。运行_直到完成()
循环。永远运行_()
作为同步区域和异步区域之间的过渡。感谢您的回复,我被困在Python中关于异步的最后一部分。如果我想在Python中使用async,这是否意味着我将以循环结束我的程序。要执行异步函数,您需要一个
run\u直到\u complete
run\u forever
调用,该调用将暂时阻止线程,然后继续正常进程。在某一点上,您必须将线程的控制权交给
EventLoop
,以便它可以管理异步内容。您可以将
loop.run_直到完成()
loop.run_forever()
视为同步地和异步地之间的过渡。