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

发布于 2022-09-12 23:56:42 字数 811 浏览 35 评论 0

小白初学协程,想使用 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()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

私野 2022-09-19 23:56:42

可以将协程理解为运行在主线程里的多任务时间片(与线程高度相似、其概念早于多线程);
基于asyncio的多任务需要同时运行,使用tasks.gather函数:

from asyncio import tasks
tasks.gather(*[
        heartbeat(), ensureConnected(), doA(),
    ], loop=loop)

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文