请问 Python 如何用 asyncio 实现并发操作。
小白初学协程,想使用 websockets
库,但是遇到在携程运行的函数里并发运行的问题。
于是用 asyncio
去模拟连接服务器,连接成功后需要去检查它的状态,和模拟发心跳,他们持续运行,但并不影响后面我用 await
发消息的操作,请问该如何实现。
import asyncioasync def heartbeat():
print('Send ping.')
await asyncio.sleep(2)
print('Get pong.')
async def ensureConnected():
while True:
print('Check connection.')
await asyncio.sleep(1)
print('Connected.')
async def doA():
print('Do A.')
await asyncio.sleep(2)
print('Done A.')
async def run():
print('Start connecting...')
await asyncio.sleep(1)
print('Connection established.')
ensureConnected()
ensureConnected()
await doA()
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
loop.close()
回答:
可以将协程理解为运行在主线程里的多任务时间片(与线程高度相似、其概念早于多线程);
基于asyncio的多任务需要同时运行,使用tasks.gather函数:
python">from asyncio import taskstasks.gather(*[
heartbeat(), ensureConnected(), doA(),
], loop=loop)
返回结果是一个future对象,run_until_complete即可
以上是 请问 Python 如何用 asyncio 实现并发操作。 的全部内容, 来源链接: utcz.com/a/162715.html