动态网站开发实训报告/最新营销模式有哪些

动态网站开发实训报告,最新营销模式有哪些,如何建设风水网站,哪里有好的免费的网站建设目录 目标 Python版本 官方文档 概述 线程池 实战 创建线程池的基本语法 批量提交任务 生产者&消费者模型 目标 掌握线程池的基本概念和使用方法。 Python版本 Python 3.9.18 官方文档 concurrent.futures — Launching parallel taskshttps://docs.python.org/3…

目录

目标

Python版本

官方文档

概述

线程池

实战

创建线程池的基本语法

批量提交任务

生产者&消费者模型


目标

        掌握线程池的基本概念和使用方法。


Python版本

        Python 3.9.18


官方文档

concurrent.futures — Launching parallel taskshttps://docs.python.org/3.9/library/concurrent.futures.html


概述

线程池

        线程的创建和销毁是需要消耗资源的,比如:CPU资源、内存、上下文切换等。线程池使得线程被创建后不停地被复用,大概过程是:

  1. 程序启动后线程池会预先创建一些线程,并将这些线程放入线程池中,这些线程是闲置着的,随时准备执行任务。
  2. 当需要任务执行时,程序会向线程池提交任务,线程池会取出一个空闲的线程来执行任务。
  3. 任务执行完成后线程不会被销毁,而是再次放回到线程池中,等待下一个任务。

我们创建线程池可以指定最大线程数量,也可以不指定。官方文档对于默认线程数量做了描述:

if max_workers is None: 
# ThreadPoolExecutor is often used to: 
# * CPU bound task which releases GIL 
# * I/O bound task (which releases GIL, of course) 

# We use cpu_count + 4 for both types of tasks. 
# But we limit it to 32 to avoid consuming surprisingly large resource 
# on many core machine. max_workers = min(32, (os.cpu_count() or 1) + 4)

即默认设置的最大线程数量是:

  1. 操作系统核心数量+4,
  2. 如果获取不到操作系统核心数量则最大线程数量是1个。
  3. 默认不超过32个线程数量。

实战

创建线程池的基本语法

import random
import time
from concurrent.futures import ThreadPoolExecutordef fun(url):time.sleep(random.randint(1,3))# 获取当前时间戳current_time = time.localtime()# 格式化时间为yyyy-MM-dd HH:mm:ssformatted_time = time.strftime('%Y-%m-%d %H:%M:%S', current_time)return f"请求到了{url}的网络数据:{formatted_time}"if __name__ == '__main__':executor = ThreadPoolExecutor(max_workers=4)task_1=executor.submit(fun, "www.baidu.com")task_2=executor.submit(fun, "www.bilibili.com")task_3=executor.submit(fun, "www.jd.com")task_4=executor.submit(fun, "www.taobao.com")task_5 = executor.submit(fun, "www.tianmao.com")task_1.done()task_2.done()task_3.done()task_4.done()task_5.done()result_1=task_1.result()result_2=task_2.result()result_3=task_3.result()result_4=task_4.result()result_5=task_5.result()print(result_1)print(result_2)print(result_3)print(result_4)print(result_5)print("主线程结束")

批量提交任务

需求

        创建一个线程池,用来批量执行不同页面的请求任务。

import random
import time
from concurrent.futures import ThreadPoolExecutor, as_completeddef get_page_html(page_num):time.sleep(random.randint(1,5))# 获取当前时间戳current_time = time.localtime()# 格式化时间为yyyy-MM-dd HH:mm:ssformatted_time = time.strftime('%Y-%m-%d %H:%M:%S', current_time)return f"请求到第{page_num}页数据:{formatted_time}"if __name__ == '__main__':executor=ThreadPoolExecutor()#请求第一页至第一百页的数据。page_num_list=[page_num for page_num in range(1,101)]task_list = [executor.submit(get_page_html,page_num) for page_num in page_num_list]#按照task_list元素的顺序返回结果,即使后面的页面数据提前请求到了数据,也会靠后返回。for task in task_list:print("按照task_list中的元素顺序返回数据:",task.result())#按照先执行完,先返回结果。for future in as_completed(task_list):print("按照先请求到数据就先返回数据:",future.result())print("主线程结束")

生产者&消费者模型

需求

        每次生产出一只烤鸭,就会被等待的消费者消费,最多生产100000只烤鸭。要求用线程池实现。

import queue
import threading
import time
from concurrent.futures import ThreadPoolExecutor# 最多生产烤鸭数量
max_duck_count = 100000
# 当前生产的烤鸭数量
duck_count = 0
# 把生产的烤鸭放入队列中
duck_queue = queue.Queue()def produce_duck(duck_queue):global duck_count# 生产者不停地生产烤鸭while True:if duck_count >= max_duck_count:breakduck_count += 1duck_queue.put(duck_count)print(f"===========生产者{threading.current_thread().name}生产了{duck_count}只烤鸭。")# 所有生产者完成后放入退出信号duck_queue.put(None)def consume_duck(duck_queue):# 消费者不停地消费烤鸭while True:duck = duck_queue.get()if duck is None:# 收到退出信号后,消费者退出duck_queue.put(None)  # 传递退出信号给其他消费者breakprint(f"——————————消费者{threading.current_thread().name}消费了{duck}只烤鸭。")# 初始化线程,设置名称
def init_thread():thread_id = threading.get_ident()threading.current_thread().name = f"线程_{thread_id}"if __name__ == '__main__':thread_pool = ThreadPoolExecutor(max_workers=10,initializer=init_thread)# 启动多个生产者线程for i in range(5):thread_pool.submit(produce_duck, duck_queue)# 启动多个消费者线程for i in range(8):thread_pool.submit(consume_duck, duck_queue)# 等待线程池中的任务执行完毕thread_pool.shutdown(wait=True)print("主线程结束。")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)SpringBoot和SpringCloud的区别

(转)SpringBoot和SpringCloud的区别:

阿里云音频算法岗内推

1、视频云直播、连麦,点播,短视频,媒体生产与处理等服务相关的实时/非实时的音频分析和处理; 2、音频处理算法,包括多场景降噪、自动增益控制、回声消除等; 3、音频特效算法研发,包括变调变速…

如何使用DeepSeek辅助准备面试

前言 又到了金三银四的时间点了。每年的这个时间点都会出现无数的机遇和机会,但是如何准备面试,应该准备哪些面试题,如何查漏补缺我们的技术面的短板,这是我们每次准备面试的时候,都会遇见的问题。在今年,…

AI数据分析:用DeepSeek做数据清洗

在当今数据驱动的时代,数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展,AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础,其目的是…

腾讯2025年软件测试面试题

以下是基于腾讯等一线互联网公司软件测试岗位的面试趋势和技术要求,025年出现的软件测试面试题。这些问题涵盖了基础知识、自动化测试、性能测试、安全测试、编程能力等多个方面,供参考和准备。 一、基础知识 软件测试的基本概念

数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 &#xff08;无需安装任何框架&#xff09; 简介一、工具类二、调用三、异步任务的操作四、效果&#xff1a; 简介 执行异步任务是一种很常见的需求&#xff0c;如批量发邮箱&#xff0c;短信等等执行耗时任务时&#xff0c;需要程序异步执行&…

STM32之影子寄存器

预分频寄存器计数到一半的时候&#xff0c;改变预分频值&#xff0c;此时不会立即生效&#xff0c;会等到计数完成&#xff0c;再从影子寄存器即预分频缓冲器里装载修改的预分频值。 如上图&#xff0c;第一行是内部时钟72M&#xff0c;第二行是时钟使能&#xff0c;高电平启动…

Deepseek API接入IDE【VSCode Cline Cursor ChatBox Deepseek deepseek-reasoner】

本文解决以下疑难杂症: 使用deepseek的最新接模型接入ide 使用deepseek的最新接模型接入vscode 使用deepseek的最新接模型接入vscode中的Cline 使用deepseek的最新接模型接入Cline 使用deepseek的最新接模型接入ChatBox 使用cursor接入Deepseek官方的的deepseek-reasoner…

在Linux桌面上创建Idea启动快捷方式

1、在桌面新建idea.desktop vim idea.desktop [Desktop Entry] EncodingUTF-8 NameIntelliJ IDEA CommentIntelliJ IDEA Exec/home/software/idea-2021/bin/idea.sh Icon/home/software/idea-2021/bin/idea.svg Terminalfalse TypeApplication CategoriesApplication;Developm…

2021-05-27 C++找出矩阵数组中值最大的元素和它在数组中的位置

缘由各位大佬&#xff0c;这个应该怎么做_编程语言-CSDN问答 void 找出数组中值最大的元素和它在数组中的位置() {//缘由https://ask.csdn.net/questions/7436585?spm1005.2025.3001.5141int a[4][4], aa 0, aaa 0, d 0, x 0;while (aa < 4 && aaa < 4)std…

DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库

项目地址&#xff1a;https://github.com/deepseek-ai/DeepEP 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天 (2/5)&#xff01; ​ ​ 引言 在大模型训练中&#xff0c;混合专家模型&#xff08;Mixture-of-Experts, MoE&#xff09;因其动…

HTTP学习——————(四)TLS等加密算法

前文学习&#xff1a; 一、二、三 学习来源网站 &#xff1a; 极客时间 TLS 目的&#xff1a;身份验证、保密性、完整性 解决问题&#xff1a; Record记录协议——对称加密 Handshake握手协议———1.验证通讯双方身份 2.交换加解密安全套件 3.协商加密参数 有密钥交换算法…

FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析

一、核心定位与历史沿革 Apache POI&#xff08;1990s-&#xff09; 作为Java生态中最古老的Excel处理库&#xff0c;提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现&#xff0c;包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…

辛格迪客户案例 | 鼎康生物电子合约系统(eSign)项目

01 案例企业 鼎康(武汉)生物医药有限公司于2013年06月19日成立 &#xff0c;是一家总部位于湖北武汉的CDMO公司&#xff0c;坚持以客户为中心&#xff0c;以及时、经济和高质量为服务导向。鼎康生物拥有先进的150,000平方英尺的生产厂房&#xff0c;生产设施位于中国武汉的Bio…

PostgreSQL10 物理流复制实战:构建高可用数据库架构!

背景 PostgreSQL 10 在高可用架构中提供了物理复制&#xff0c;也称为流复制&#xff08;Streaming Replication&#xff09;&#xff0c;用于实现实例级别的数据同步。PostgreSQL 复制机制主要包括物理复制和逻辑复制&#xff1a;物理复制依赖 WAL 日志进行物理块级别的同步&…

从二维随机变量到多维随机变量

二维随机变量 设 X X X和 Y Y Y是定义在同一样本空间 Ω \varOmega Ω上的两个随机变量&#xff0c;称由它们组成的向量 ( X , Y ) (X, Y) (X,Y)为二维随机变量&#xff0c;亦称为二维随机向量&#xff0c;其中称 X X X和 Y Y Y是二维随机变量的分量。 采用多个随机变量去描述…

RabbitMQ系列(一)架构解析

RabbitMQ 架构解析 RabbitMQ 是一个基于 AMQP 协议的开源消息中间件&#xff0c;其核心架构通过多组件协作实现高效、可靠的消息传递。以下是其核心组件与协作流程的详细说明&#xff1a; 一、核心组件与功能 Broker&#xff08;消息代理服务器&#xff09; RabbitMQ 服务端核…

Spring Cloud之注册中心之Nacos的使用

目录 Naacos 服务注册/服务发现 引⼊Spring Cloud Alibaba依赖 引入Nacos依赖 引入Load Balance依赖 配置Nacos地址 服务端调用 启动服务 Naacos Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服务发现规范. 因此使⽤Na…

使用通义万相Wan2.1进行视频生成

使用通义万相Wan2.1进行视频生成 源代码准备运行环境准备创建Python虚拟环境并激活安装依赖包 模型下载生成视频官网的视频生成例子简单描述场景视频生成示例详细描述场景视频生成示例 最近通义万相开源了其视频生成模型。模型有两个版本&#xff0c;一个是1.3B的&#xff0c;一…