python 关于异步的函数如何写?

本文深入探讨了Python中asyncio和trio库的异步编程技巧,通过实例展示了客户端与服务器的通信过程,对比了不同sleep函数的使用场景,为开发者提供了实用的异步编程指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、说在前面的话

    目前我知道的库:trio   asyncio    这两个库 下面分别对这两个库的使方法进行举例

 

2、asyncio(使用方法很简单)

客户端:

import time
from pynng import Pub0, Sub0, Timeout
import asyncio
address = 'tcp://127.0.0.1:31313'

async def subclientasyn():
    sub1 = Sub0(dial=address)
    sub1.subscribe(b'')
    i = 1
    while True:
        i = i + 1
        msg= await sub1.arecv()
        print('收到的内容',msg)
def subclient():
    sub1 = Sub0(dial=address)
    sub1.subscribe(b'')
    i = 1
    while True:
        msg=sub1.recv()
        print('收到的内容',msg)
if __name__=='__main__':
    import trio
    # subclient()

    # trio.run(subclientasyn)
    tasks = [asyncio.ensure_future(subclientasyn())]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()




服务器:

import time
from pynng import Pub0, Sub0, Timeout
import asyncio
address = 'tcp://127.0.0.1:31313'

def pubserver():
    pub=Pub0(listen=address)
    i = 1
    while True:
        i = i + 1
        time.sleep(1)
        print('we are sending-----')
        pub.send(b'asyn masg')
async def pubserverasyn():
    pub=Pub0(listen=address)
    i = 1
    while True:

        i = i + 1
        # await trio.sleep(1)
        await asyncio.sleep(1)
        print('we are sending-----')
        await pub.asend(str(i).encode())
async def subclient():
    sub1 = Sub0(dial=address, recv_timeout=100)
    sub1.subscribe(b'')
    i = 1
    while True:
        i = i + 1
        msg= await sub1.arecv()
        print('收到的内容',msg)


if __name__=='__main__':
    import trio
    # pubserver()
    tasks = [asyncio.ensure_future(pubserverasyn())]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()

    # trio.run(pubserverasyn)

以上是我使用nng 这个通信库使用的

涉及到具体python的中的异步的地方:

async ----------》await   函数中要使用这两个

对于执行的地方:

tasks = [asyncio.ensure_future(pubserverasyn())]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

2、trio(很简单)

只需要最后运行的时候,trio.run(要异步运行的函数)

其中关于sleep   trio.sleep    asyncio.sleep

各自是不同的,必须要用对应的库才行。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值