当前位置: 首页 > news >正文

Python备忘

1. 自定义多线程程序:

import concurrent.futures
import threadingclass CustomThreadPool:def __init__(self, max_workers):self.max_workers = max_workersself.pool = concurrent.futures.ThreadPoolExecutor(max_workers)self.running_num = 0self.semaphore = threading.Semaphore(max_workers)def submit(self, fn, *args, **kwargs):self.semaphore.acquire()  # 获取信号量(如果已满则阻塞)self.running_num += 1future = self.pool.submit(fn, *args, **kwargs)future.add_done_callback(self._callback)return futuredef _callback(self, future):self.running_num -= 1self.semaphore.release()  # 释放信号量,允许新任务提交def shutdown(self):self.pool.shutdown()

以上程序实现:使用这个自定义线程池时,当并发任务数达到上限后,新提交的任务会被阻塞,直到有任务完成。

使用程序:

import time
import random
from custom_threadpool import CustomThreadPool  # 假设上面的类保存在 custom_threadpool.py 中# 模拟下载图片的函数(实际应用中可替换为 requests.get 等真实下载逻辑)
def download_image(url):# 模拟网络请求延迟delay = random.uniform(0.5, 2.0)time.sleep(delay)# 模拟下载结果size = random.randint(100, 1000)print(f"下载完成: {url} (大小: {size}KB, 耗时: {delay:.2f}s)")return {"url": url, "size": size, "status": "success"}# 主程序
def main():# 创建一个最大并发数为3的线程池with CustomThreadPool(max_workers=3) as pool:# 模拟10个图片下载任务image_urls = [f"https://example.com/image_{i}.jpg" for i in range(1, 11)]# 提交所有下载任务futures = []for url in image_urls:future = pool.submit(download_image, url)futures.append(future)# 获取所有任务的结果(按完成顺序输出)for future in concurrent.futures.as_completed(futures):try:result = future.result()print(f"处理结果: {result['url']} ({result['size']}KB)")except Exception as e:print(f"下载失败: {e}")if __name__ == "__main__":start_time = time.time()main()print(f"总耗时: {time.time() - start_time:.2f}秒")

2.* ** 参数:

def example(a, b, *args, **kwargs):print(f"固定参数:a={a}, b={b}")print(f"位置参数:{args}")print(f"关键字参数:{kwargs}")example(1, 2, 3, 4, x=5, y=6)
# 输出:
# 固定参数:a=1, b=2
# 位置参数:(3, 4)
# 关键字参数:{'x': 5, 'y': 6}

 

http://www.lqws.cn/news/170191.html

相关文章:

  • ES6——数组扩展之Set数组
  • onSaveInstanceState() 和 ViewModel 在数据保存能力差异
  • ES6——对象扩展之Set对象
  • 详细介绍uni-app中Composition API和Options API的使用方法
  • uniapp Vue2 获取电量的独家方法:绕过官方插件限制
  • uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
  • 深度学习环境配置指南:基于Anaconda与PyCharm的全流程操作
  • 前端面试题之ES6保姆级教程
  • Vue3 + UniApp 蓝牙连接与数据发送(稳定版)
  • 【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
  • 学习笔记(26):线性代数-张量的降维求和,简单示例
  • uniapp+vue2解构赋值和直接赋值的优缺点
  • 如何利用 Redis 实现跨多个无状态服务实例的会话共享?
  • 传统业务对接AI-AI编程框架-Rasa的业务应用实战(4)--Rasa成型可用 针对业务配置rasa并训练和部署
  • AI代码助手需求说明书架构
  • 408第一季 - 数据结构 - 数组和特殊矩阵
  • 贝叶斯网络_TomatoSCI分析日记
  • 探索 Java 垃圾收集:对象存活判定、回收流程与内存策略
  • 如何理解OSI七层模型和TCP/IP四层模型?HTTP作为如何保存用户状态?多服务器节点下 Session方案怎么做
  • Docker部署Hive大数据组件
  • JAVA学习 DAY2 java程序运行、注意事项、转义字符
  • 数据库:索引
  • JS设计模式(4):观察者模式
  • 发版前后的调试对照实践:用 WebDebugX 与多工具构建上线验证闭环
  • Spring Boot 实现流式响应(兼容 2.7.x)
  • 23套橙色系精选各行业PPT模版分享
  • windows上的visual studio2022的项目使用jenkins自动打包
  • 极速互联·智控未来——SG-Can(FD)Hub-600 六通道CANFD集线器
  • 【Go语言基础【9】】字符串格式化与输入处理
  • Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流