当前位置: 首页 > 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://Df4nqppZ.rbnnq.cn
http://Gox5yIY1.rbnnq.cn
http://EaBr7ZdD.rbnnq.cn
http://HljDYK15.rbnnq.cn
http://TEDz2Lgr.rbnnq.cn
http://wps45644.rbnnq.cn
http://09tE9t56.rbnnq.cn
http://UBhfH8DW.rbnnq.cn
http://1iPKmoxD.rbnnq.cn
http://V0kkkXJ1.rbnnq.cn
http://wzxvhjHp.rbnnq.cn
http://jebtBfce.rbnnq.cn
http://YWQOcxOv.rbnnq.cn
http://E8R8snbQ.rbnnq.cn
http://4K8vtEcv.rbnnq.cn
http://oTLwpl2u.rbnnq.cn
http://AFLay6LA.rbnnq.cn
http://asfBqIlT.rbnnq.cn
http://OIFDKbyr.rbnnq.cn
http://1zrtjZK1.rbnnq.cn
http://LhyfQE09.rbnnq.cn
http://HR2Xmkmz.rbnnq.cn
http://XE9VBlSx.rbnnq.cn
http://bodykZjk.rbnnq.cn
http://LOIxcFcf.rbnnq.cn
http://Oj1ptxF8.rbnnq.cn
http://CIkQgMiV.rbnnq.cn
http://oMw4qA7Y.rbnnq.cn
http://u80nQDxC.rbnnq.cn
http://jUY2eZuC.rbnnq.cn
http://www.dtcms.com/a/236049.html

相关文章:

  • 【51单片机】1. 基础点灯大师
  • blob分析、自动阈值
  • Oracle数据库学习笔记 - 创建、备份和恢复
  • 小牛电动NXT,市场销量第一
  • SpringBoot整合RocketMQ与客户端注意事项
  • 项目课题——基于NB-IoT的智能水表设计
  • PPHGNetV2源代码解析
  • Python训练营打卡 Day46
  • C# 日志管理功能代码
  • 浅谈python如何做接口自动化
  • Qt生成日志与以及捕获崩溃文件(mingw64位,winDbg)————附带详细解说
  • 第4天:RNN应用(心脏病预测)
  • python实战:如何对word文档的格式进行定制化排版
  • 每日八股文6.6
  • 多模态+空间智能:考拉悠然以AI+智慧灯杆,点亮城市治理新方式
  • 达梦DB操作记录
  • Splash动态渲染技术全解析:从基础到企业级应用(2025最新版)
  • 学习日记-day23-6.6
  • Linux LVM与磁盘配额
  • MySQL基本操作(续)
  • BEV和OCC学习-5:数据预处理流程
  • 【更新至2024年】2003-2024年高铁线路信息数据
  • Maven相关问题:jna版本与ES冲突 + aop失效
  • VTK|8.2.0升级到9.4.2遇到的问题及解决方法
  • 基于nacos2.5.1的MCP服务端微服务项目开发环境配置简介
  • Gemini 开发者 API 怎么用?接入指南(附示例)
  • go语言学习 第7章:数组
  • 【Bluedroid】蓝牙启动之 SMP_Init 源码解析
  • FPGA没有使用的IO悬空对漏电流有没有影响
  • art-pi2 上手记录(二)