Python异步循环可以是异步的吗?
我在幻灯片上看到golang可以这样做: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
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()
视为同步地和异步地之间的过渡。