sed*_*rep 3 python synchronization asynchronous python-asyncio
我正在使用asyncioPython 模块,但我不知道我的简单代码有什么问题。它不会异步执行任务。
#!/usr/bin/env python3
import asyncio
import string
async def print_num():
for x in range(0, 10):
print('Number: {}'.format(x))
await asyncio.sleep(1)
print('print_num is finished!')
async def print_alp():
my_list = string.ascii_uppercase
for x in my_list:
print('Letter: {}'.format(x))
await asyncio.sleep(1)
print('print_alp is finished!')
async def msg(my_msg):
print(my_msg)
await asyncio.sleep(1)
async def main():
await msg('Hello World!')
await print_alp()
await msg('Hello Again!')
await print_num()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Run Code Online (Sandbox Code Playgroud)
这是调用脚本时的输出:
Hello World!
Letter: A
Letter: B
Letter: C
Letter: D
Letter: E
Letter: F
Letter: G
Letter: H
Letter: I
Letter: J
Letter: K
Letter: L
Letter: M
Letter: N
Letter: O
Letter: P
Letter: Q
Letter: R
Letter: S
Letter: T
Letter: U
Letter: V
Letter: W
Letter: X
Letter: Y
Letter: Z
print_alp is finished!
Hello Again!
Number: 0
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Number: 6
Number: 7
Number: 8
Number: 9
print_num is finished!
Run Code Online (Sandbox Code Playgroud)
您按顺序调用函数,因此代码也按顺序执行。请记住,这await this意味着“执行this并等待它返回”(但与此同时,如果this选择暂停执行,则可能会运行其他地方已经启动的其他任务)。
如果您想异步运行任务,您需要:
async def main():
await msg('Hello World!')
task1 = asyncio.ensure_future(print_alp())
task2 = asyncio.ensure_future(print_num())
await asyncio.gather(task1, task2)
await msg('Hello Again!')
Run Code Online (Sandbox Code Playgroud)
另请参阅该函数的文档asyncio.gather。或者,您也可以使用asyncio.wait.