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))