小黑边摸鱼边进行学习:协程基础7

5.实战案例

5.1 异步redis

在使用python代码操作redis时,链接/操作/断开都是网络IO。

pip3 install aioredis

示例1:

REDIS_HOST = '5.0.14.1'
REDIS_PASSWORD = ''
REDIS_PORT = 6379
REDIS_DB = 0

import asyncio
import aioredis

async def execute(address, password):
    print('开始执行', address)
    # 网络IO操作:创建redis连接
    redis = await aioredis.Redis.from_url(url=address, password=password)
    # 网络IO操作:在redis中设置哈希值car
    await redis.hmset('car', {'key1':1, 'key2':2, 'key3':3})
    # 网络IO操作:去redis中获取值
    result = await redis.hgetall('car', encoding='utf-8')
    print(result)
    redis.close()
    # 网络IO操作:关闭redis连接
    await redis.wait_closed()
    print('结束', address)

if __name__ == '__main__':
    asyncio.run(execute(f'redis://{REDIS_HOST}:{REDIS_PORT}', password=REDIS_PASSWORD))

示例2

REDIS_HOST = '5.0.14.1'
REDIS_PASSWORD = ''
REDIS_PORT = 6379
REDIS_DB = 0

import asyncio
import aioredis

async def execute(address, password):
    print('开始执行', address)
    # 网络IO操作:创建redis连接
    redis = await aioredis.Redis.from_url(url=address, password=password)
    # 网络IO操作:在redis中设置哈希值car
    await redis.hmset('car', {'key1':1, 'key2':2, 'key3':3})
    # 网络IO操作:去redis中获取值
    result = await redis.hgetall('car', encoding='utf-8')
    print(result)
    redis.close()
    # 网络IO操作:关闭redis连接
    await redis.wait_closed()
    print('结束', address)

if __name__ == '__main__':
    task = [execute(f'redis://{REDIS_HOST}:{REDIS_PORT}', password=REDIS_PASSWORD),
            execute(f'redis://{REDIS_HOST}:{REDIS_PORT}', password=REDIS_PASSWORD)
            ]
    asyncio.run(asyncio.wait(task))

5.2异步MySQL

pip3 install aiomysql

示例

import asyncio
import aiomysql

async def execute(host, password):
    print('开始')
    # 网络IO操作:先去连接47.93.40.197,遇到IO则自动切换任务,去连接47.93.40.198:6379
    conn = await aiomysql.connect(host=host, port=3306, user='root', password=password, db='mysql')
    # 网络IO操作:遇到IO会自动切换任务
    cur = await conn.cursor()
    # 网络IO操作:遇到IO会自动切换任务
    await cur.execute('SELECT Host,User FROM user')
    # 网络IO操作:遇到IO自动切换任务
    result = await cur.fetchall()
    print(result)
    # 网络IO操作:遇到IO会自动切换任务
    await cur.close()
    conn.close()
    print('结束', host)
if __name__ == '__main__':
    task_list = [
        execute('47.93.41.197', 'root!2345'),
        execute('47.93.41.197', 'root!2345')
    ]
    asyncio.run(asyncio.wait(task_list))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值