请问 Python 如何用 asyncio 实现并发操作。

请问 Python 如何用 asyncio 实现并发操作。

小白初学协程,想使用 websockets 库,但是遇到在携程运行的函数里并发运行的问题。

于是用 asyncio 去模拟连接服务器,连接成功后需要去检查它的状态,和模拟发心跳,他们持续运行,但并不影响后面我用 await 发消息的操作,请问该如何实现。

import asyncio

async 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 tasks

tasks.gather(*[

heartbeat(), ensureConnected(), doA(),

], loop=loop)

返回结果是一个future对象,run_until_complete即可

以上是 请问 Python 如何用 asyncio 实现并发操作。 的全部内容, 来源链接: utcz.com/a/162715.html

回到顶部