鱼C论坛

 找回密码
 立即注册
楼主: wideband

类学习

[复制链接]
 楼主| 发表于 2023-7-5 07:08:29 | 显示全部楼层
async f1,f2——协程函数,运行返回 协程对象;  
协程函数单独调用: response = await f1(), await提交到 loop, // await可以接收一个任务返回值,没拿到就一直等。

coroutines=[f(),f2()]——携程对象 放置到 列表里,等待转成任务执行;

asyncio.run(asyncio.wait(coroutines))——执行任务 () //asyncio.run(main()), main协程中使用await asyncio.wait()来等待它们的完成。
done, pending = await asyncio.wait(coroutines)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 07:30:10 | 显示全部楼层
它返回两个集合:已完成的任务集合done和未完成的任务集合pending。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 08:31:26 | 显示全部楼层
asyncio.create_task(f1()),
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 14:05:52 | 显示全部楼层
注:asyncio创建task时,要写在main()函数内;

task1 = asyncio.create_task(f1())
task2= asyncio.create_task(f1())

或者:
coroutines=[f(),f2()]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 15:30:17 | 显示全部楼层
import asyncio
async def func():
    print("测试")
result = func()
# 1oop = asyncio.get_event_1oop( I
# loop.run_unti1_complete( result )
asyncio.run( result ) # python3.7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 19:23:47 | 显示全部楼层
import asyncio

async def others():
    print("开始")
    await asyncio.sleep(2)
    print('end')
    return '返回值'

async def func():
    print("执行协程函数内部代码")
    # 遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)。
    response1 = await others()
    print("IO请求结束,结果为:",response1)

    response2 = await others()
    print("IO请求结束,结果为:",response2)

asyncio.run(func())

为什么在当前的代码示例中,response1 = await others() 和 response2 = await others() 是按顺序执行的,而不会在等待过程中切换呢?

在同一个协程内部,代码会按顺序执行,而不会在等待过程中切换到其他协程上。
当执行 response1 = await others() 时,会等待异步操作完成。只有在该异步操作完成后,才会执行下一行代码 response2 = await others()。
如果要实现异步并发执行,需要使用多个协程并适当处理它们的调度和等待机制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 08:26:31 | 显示全部楼层
1:协程对象一次只能提交一个任务,task对象才能批量提交:除非通过gather将多个协程对象封装成任务对象。

2:await 只在 async 函数中使用。可暂停当前协程的执行,直到对象返回结果。 await :Coroutine 对象、task对象、Future 对象。await asyncio.sleep(2)
asyncio.wait(任务列表) :转换程 协程对象;

# loop = asyncio.get_event_1oop()
# loop.run_unti1_complete( result )

asyncio.run( result ) # python3.7, 简化,相当于
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 17:54:00 | 显示全部楼层
异步迭代器: __aiter__()和__anext__()方法来实现,异步迭代器允许在每次迭代时发起异步操作,并在操作完成后获取或产生相应的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 15:54:59 | 显示全部楼层
select distinct ID from students; # 去重复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 16:00:31 | 显示全部楼层
SELECT * FROM employees WHERE last_name LIKE 'Sm%';

这个查询将返回姓以"Sm"开头的所有员工,如"Smith"、"Smythe"等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 16:16:42 | 显示全部楼层
SELECT * FROM customers WHERE country IN ('USA', 'Canada', 'Mexico');
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 16:56:00 | 显示全部楼层
为了快速统计数据,常用5个聚合函数:

select count(*) from student;

select max(ID) from student;

select sum(age) from student;

select ave(age) from student;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 17:09:17 | 显示全部楼层
假设有一个名为"employees"的员工表,包含以下数据:

id        name        department
1        John                Sales
2        Jane                IT
3        Michael        HR
4        Emma        Sales
SELECT GROUP_CONCAT(DISTINCT department SEPARATOR ', ') AS departments FROM employees;

departments
--------------------
Sales, IT, HR
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-24 10:19:53 | 显示全部楼层
写一个登陆装饰器,对一函数def run() 函数进行装饰,要求输入账户和密码,都正确则运行函数run(),否则提示错误,要求重新输入;但是连续3次错误,则提示:密码错误,不能继续,程序退出;
def login_required(func):
    max_attempts = 3  # 最大尝试次数
    attempts = 0  # 已尝试次数

    def wrapper():
        nonlocal attempts

        # 验证函数
        def check_credentials(username, password):
            # 此处为示例,你可以根据实际情况修改
            valid_username = "admin"
            valid_password = "password"

            if username == valid_username and password == valid_password:
                return True
            else:
                return False

        while attempts < max_attempts:
            username = input("请输入账户名:")
            password = input("请输入密码:")
            if check_credentials(username, password):
                return func()  # 运行被装饰的函数
            else:
                print("账户或密码错误,请重新输入。")
                attempts += 1

        print("密码错误次数超过限制,程序退出。")

    return wrapper




@login_required
def run():
    print("开始执行函数")


# 测试
run()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-27 10:24:42 | 显示全部楼层
wideband 发表于 2023-4-18 09:53
可迭代对象:可以用 for 循环遍历的对象,iter

from collections import Iterable

from typing import Iterable,Iterator
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-28 09:36:50 | 显示全部楼层
冒泡排序:
nums = [30,12,56,9,8,68,2]

def bubble(nums):
    for j in range(0,len(nums)-1): #3个数排序,先求最大值要排序2次,然和,求次大值只需要排1次序了。

        for i in range(0,len(nums)-1-j):
            if nums[i] > nums[i+1]:
                nums[i],nums[i + 1] = nums[i+1],nums[i]

bubble(nums)

print(nums)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表