python多线程的使用

Python 多线程探索

在这里插入图片描述

在 Python 编程中,多线程是一项强大的技术,它允许我们同时执行多个任务,从而提高程序的效率和响应性。

一、线程的基本概念

线程是进程中的一个执行单元,可以与其他线程共享进程的资源。

二、创建线程

在 Python 中,我们可以使用threading模块来创建线程。以下是一个简单的示例代码:

import threading# 定义线程执行的函数
def thread_function(name):print(f"线程 {name} 正在运行")# 创建线程
thread1 = threading.Thread(target=thread_function, args=("线程 1",))
thread2 = threading.Thread(target=thread_function, args=("线程 2",))# 启动线程
thread1.start()
thread2.start()

三、线程同步

当多个线程访问共享资源时,可能会出现数据不一致的问题。为了解决这个问题,我们可以使用锁。

import threading# 创建锁
lock = threading.Lock()# 共享资源
counter = 0def increment():global counterwith lock:  # 使用锁来保护对共享资源的访问counter += 1# 创建多个线程来执行递增操作
thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=increment)thread1.start()
thread2.start()thread1.join()
thread2.join()print(counter)

四、线程间通信

线程之间可以通过一些机制进行通信,例如使用队列。

import threading
from queue import Queue# 定义任务队列
task_queue = Queue()def worker():while not task_queue.empty():task = task_queue.get()print(f"执行任务: {task}")# 添加任务到队列
task_queue.put("任务 1")
task_queue.put("任务 2")# 创建线程来执行任务
thread = threading.Thread(target=worker)# 启动线程
thread.start()

多线程爬虫

以下是一个使用 Python 多线程进行爬虫的示例代码:

import threading
import requests
from bs4 import BeautifulSoup# 定义要爬取的网页列表
web_pages = ["https://example1.com", "https://example2.com", "https://example3.com"]# 线程执行函数
def crawl_page(url):response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')# 在这里进行网页内容的处理和提取# 创建线程并启动
threads = []
for page in web_pages:thread = threading.Thread(target=crawl_page, args=(page,))thread.start()threads.append(thread)# 等待所有线程完成
for thread in threads:thread.join()

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

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

相关文章

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了,我建议运行运存给到4g或者4g以上就可以了,核数可以给到1核或以上 我部署在centos7.9操作系统上,ip地址为:192.168.6.1,yum仓库使用的是自己的镜像文件,本章所有使用到…

爱普生XC1011SD为电气稳定控制系统组合式传感器推出解决方案

在现代电力系统中,确保系统的安全和稳定运行至关重要。为了应对这一需求,我们推出了XC1011SD组合式传感器解决方案,它专为电气稳定控制系统设计,提供了卓越的性能和可靠性。 XC1011SD是一款集成陀螺仪传感器和双轴加速度计于一体的…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好,我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧,帮助大家迅速增加粉丝。这个方法简单实用,尤其适用于副业和本地生活领域。接下来,我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱:模…

合约构成-成员变量、函数、事件event、修饰器modifier及构造函数

合约的基本结构 合约中的成员变量合约中的成员函数Event(事件)、modifier(修饰器)与constructor(构造函数:实例产生的时候执行) Event事件 modifier construcor 1、成员变量 概念:存储合约状态的变量 声明方法&a…

北京证券公司港股通交易佣金手续费最低是多少?万0.8?港股通纳入规则是怎么样的?

港股通交易佣金概述 港股通的交易佣金可能会因证券公司和投资者的不同而有所差异。 北京证券公司的港股通交易佣金最低可能万分之零点八(0.008%),但这需要投资者与证券公司客户经理了解,进行沟通和申请。 一般来说,…

CSS学习笔记:Less

什么是Less? Less是一个CSS预处理器, Less文件后缀是.less 扩充了CSS 语言,使CSS具备一定的逻辑性、计算能力 可以通俗地理解:Less是一种更好用的CSS 注释 运算 嵌套 Less嵌套的作用:快速生成后代选择器 变量 问…

软考中级-软件设计师-真题详解【2023年上半年】

2023上半年真题记忆点详解 本片不涉及解题法,只整理记忆背诵点,记住即可拿分。 上午题部分: 片内总线:用于芯片内部各主要部件连接; 系统总线:用于CPU、主存、外设见的数据传输; 通讯总线&…

04 FreeRTOS 队列(queue)

1、队列的特性 队列可以理解为一个传送带,一个流水线。 队列可以包含若干个数据:队列中有若干项,这被称为"长度"(length) 每个数据大小固定 创建队列时就要指定长度、数据大小 数据的操作采用先进先出的方法(FIFO,First…

干货分享 —— 如何开展web项目自动化测试!

前言 自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人直接参与的情况下,根据人的要求,通过自动检测、信息处理、分析判断、操纵和控制,达到预期目标的过程。自动化测试是指测试过程是在没有人为或较少人为干预…

从零构建vue3+ts+vite项目打包及项目依赖配置

❗️❗️❗️❗️ 写在最前: 本文是根据B站作者 月光分层 视频vuets 工程化配置以及作者笔记稍作整理 💖💖作者B站地址https://space.bilibili.com/14110850 💖💖视频教程地址vuets 工程化配置 💖💖作者微信…

【计算机毕业设计】安卓054基于Android校园助手

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

LAMP源码编译安装——CentOS7

文章目录 LAMP是什么LAMP软件组件LinuxApacheMySQLPHP 源码安装Apache一、准备工作二、安装环境依赖包三、配置软件模块四、编译及安装五、优化配置文件路径六、添加httpd系统服务(有两种方法)方法一:方法二: 七、修改httpd 服务配…

公告:关于博主的重要通知

大家好,我是博主夏目。 本期不分享知识,博主想说明一下博主的一些重要提示。 分享的内容,从不收费,也未向任何人进行收费。 意在分享知识,传播文化,结交更多志同道合的朋友。 截至目前,从未…

《C++ Primer Plus》第十二章复习题和编程练习

目录 一、复习题二、编程练习 一、复习题 1. 假设String类有如下私有成员: // String 类声明 class String { private: char* str;int len;// ... };a. 下述默认构造函数有什么问题? String::String() { } // 默认构造函数b. 下述构造函数有什么问题…

VirtualBox+Ubuntu22.10+Docker+ROS2

Docker 拉取ros2镜像 docker pull osrf/ros:foxy-desktop 运行 docker run -it --nameros2 -p 50022:22 osrf/ros:foxy-desktop 进入容器安装组件 apt-get update apt-get install vim apt-get install git apt-get install net-tools # 安装ssh apt-get install openssh…

centos下给es7.12.1设置密码

安装可参考: centos7下安装elasticsearch7.8.1并配置远程连接_在一台服务器centos7上安装和配置elasticsearch。-CSDN博客 1、先停掉es进程 2、设置输入密码后访问配置 cd /home/soft/elasticsearch-7.12.1/config vim elasticsearch.yml 3、启动es服务 cd /home/…

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro(OrangePi AIpro),下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…

在Python中实现限定抽奖次数的机制

目录 一、引言 二、需求分析 三、设计思路 四、代码实现 4.1 使用字典存储用户抽奖次数 4.2 使用数据库存储用户抽奖次数 五、扩展与优化 六、总结 一、引言 在当今互联网应用中,抽奖系统作为吸引用户、提高用户参与度和活跃度的重要手段,已经被…

为什么配置了安全组还是有攻击进来?

面对DDoS攻击,即使配置了安全组规则来限制入站流量,攻击者仍可能找到绕过这些基本防护措施的方法,尤其是当攻击流量巨大时。这是因为安全组主要工作在网络层和传输层,它们依据IP地址、协议和端口号来过滤流量,对于应用…

Android14 WMS-窗口添加流程(一)-Client端

窗口布局在onCreate方法中通过setContentView(R.layout.xxx)加载,但窗口的显示并不是在wm_on_create_called中, 而是在wm_on_resume_called后,也就是说应用onResume时此窗口是不可见的,真正可见是当此window窗口的mDrawState变化状态从NO_SUR…