多线程爬虫基础代码

#导入线程模块
import threading      def coding():             #定义 coding 函数,用于打印字符串 "aaa" 十次for i in range(10):print("aaa")def ac():                 #定义 ac 函数,用于打印字符串 "bbbb" 十次:for j in range(10):print("bbbb")def main():               #定义 main 函数,用于创建并启动两个线程:# 创建第一个线程,目标函数是 codingt1 = threading.Thread(target=coding)        # 创建第二个线程,目标函数是 act2 = threading.Thread(target=ac)             t1.start()  # 启动第一个线程t2.start()  # 启动第二个线程if __name__ == '__main__':        #在 __main__ 中调用 main 函数:main()

这段代码创建了两个线程,一个用于执行 coding 函数,另一个用于执行 ac 函数。每个函数都简单地打印了一段字符串多次。主函数 main 中创建了这两个线程,并启动它们,使它们可以并发地执行。


 

# 定义第一个线程类
import threadingclass MyThread(threading.Thread):# 重写 run 方法def run(self):# 循环打印 "bbbb" 十次for j in range(10):print("bbbb")# 定义第二个线程类
class YourThread(threading.Thread):# 重写 run 方法def run(self):# 循环打印 "aaa" 十次for i in range(10):print("aaa")# 主函数
def main():# 创建 YourThread 的实例t1 = YourThread()# 创建 MyThread 的实例t2 = MyThread()# 启动第一个线程t1.start()# 启动第二个线程t2.start()# 当前文件被直接运行时执行主函数
if __name__ == "__main__":main()

这段代码创建了两个线程类 MyThread 和 YourThread,它们都继承自 threading.Thread 类,并重写了 run() 方法。在 MyThread 类中,run() 方法会打印字符串 "bbbb" 十次,而在 YourThread 类中,run() 方法会打印字符串 "aaa" 十次。
在 main() 函数中,创建了一个 YourThread 类的实例 t1 和一个 MyThread 类的实例 t2。然后分别调用了它们的 start() 方法,以启动两个线程并发执行。
这段代码的执行结果会交替输出 "aaa" 和 "bbbb" 字符串,每个字符串各输出十次,因为两个线程是并行执行的。
这种方式可以更好地组织代码,将线程相关的逻辑封装在类中,提高了代码的可维护性 


import threading# 全局变量 a 初始化为 0
a = 0# 创建一个线程锁对象
lock = threading.Lock()# 定义一个函数,该函数将对全局变量 a 执行增加 1000 次的操作
def add_a():global a  # 声明 a 为全局变量for i in range(1000):# 获取线程锁,确保线程安全lock.acquire()# 对全局变量 a 执行加一操作a += 1# 打印增加后的值print(a)# 释放线程锁,允许其他线程获取锁lock.release()# 主函数,创建两个线程并启动它们
def main():for j in range(2):# 创建线程,并指定目标函数为 add_at = threading.Thread(target=add_a)# 启动线程t.start()# 如果当前文件被直接执行,则调用主函数
if __name__ == "__main__":main()

 此代码创建了两个线程,每个线程执行 add_a 函数,该函数会对全局变量 a 进行增加 1000 次的操作。为了确保在多线程环境中对 a 的修改是线程安全的,使用了 threading.Lock 对象 lock。这样,每个线程在修改 a 之前会获取锁,修改完成后释放锁,确保其他线程不会同时访问和修改 a,从而避免了竞态条件(Race Condition)的发生。在主函数 main 中,创建了两个线程,并启动它们,以便同时执行 add_a 函数。

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

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

相关文章

jetson nano——编译安装opencv-python==4.3.0.38

目录 1.下载源码,我提供的链接如下:2.解压文件3.安装依赖scikit4.安装opencv-python5.查看opencv-python版本 系统:jetson-nano-jp451-sd-card-image ubuntu 18.04 1.下载源码,我提供的链接如下: 链接:http…

网络:IPv6

1、由于IPv4地址资源枯竭,所以产生了IPV6。 版本长度地址数量IPv432 bit4 294 967 296IPv6128 bit340 282 366 920 938 463 374 607 431 768 211 456 2、IPv6的基本报头在IPv4报头基础上,增加了流标签域,去除了一些冗余字段,使报…

RabbitMQ常用命令笔记

Ubuntu 安装 sudo apt install rabbitmq-server查看状态 sudo rabbitmqctl status启动可视化插件 sudo rabbitmq-plugins enable rabbitmq_management查看可视化端口 sudo rabbitmqctl status添加用户名密码 sudo rabbitmqctl add_user 用户名 密码设置管理员权限 sudo r…

docker (十二)-私有仓库

docker registry 我们可以使用docker push将自己的image推送到docker hub中进行共享,但是在实际工作中,很多公司的代码不能上传到公开的仓库中,因此我们可以创建自己的镜像仓库。 docker 官网提供了一个docker registry的私有仓库项目&#…

Zookeeper基础入门-2【ZooKeeper 分布式锁案例】

Zookeeper基础入门-2【ZooKeeper 分布式锁案例】 四、ZooKeeper-IDEA环境搭建4.1.环境搭建4.1.1.创建maven工程:zookeeper4.1.2.在pom文件添加依赖4.1.3.在项目的src/main/resources 目录下,新建文件为“log4j.properties”4.1.4.创建包名com.orange.zk …

分布式概念:写一个分布式锁

分布式锁是一种用于解决分布式系统中资源并发访问的问题的机制。它可以保证在分布式环境中,同一时刻只有一个线程或进程可以访问某个共享资源,从而避免了竞态条件的发生。 以下是一个简单的分布式锁的实现示例: 使用一个共享的分布式存储系统…

Neoverse S3 系统 IP:机密计算和多芯片基础设施 SoC 的基础

第三代Neoverse系统IP Neoverse S3 产品推出了我们的第三代基础设施特定系统 IP,这是下一代基础设施 SOC 的理想基础,适用于从 HPC 和机器学习到 Edge 和 DPU 的各种应用。S3 机箱专注于为我们的合作伙伴提供 Chiplet、机密计算等关键创新以及 UCIe、DD…

(Linux学习一):Mac安装vmWare11.5,centOS 7安装步骤教程

一。下载vmware 官网地址:下载地址 由于我的电脑系统是Mac 10.15.6版本系统,我下载的是VMware Fusion 11.5版本,13是最新版本不支持安装需要系统在11以上。 百度网盘下载地址: VMware Fusion 11 VMware Fusion 12 VMware Fusion 13 下载需要…

matlab实现不同窗滤波器示例

1 汉明窗低通滤波器 : 在Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器,可以提供更突出的频率特性。 下面是一个示例代码,演示如何在Matlab中使用汉明窗设计低通滤波器: % 定义滤波器参数 fs …

揭秘数字证书:保护你的数据不止于表面

数字证书,这个看似枯燥无味的电子文件,其实背后隐藏着一套精密的运行机制。今天陕西CA就来给大家揭开它的神秘面纱。 首先,数字证书是由权威的第三方机构颁发的,这些机构通常被称为证书颁发机构(CA)&#…

python web框架fastapi模板渲染--Jinja2使用技巧总结

文章目录 1.jinja2模板1.1、jinja2 的变量1.1.1 列表类型数据渲染1.1.2 字典类型数据渲染 2. jinja2 的过滤器3. jinja2 的控制结构3.1、分支控制3.2、循环控制 1.jinja2模板 要了解jinja2,那么需要先理解模板的概念。模板在Python的web开发中⼴泛使⽤,…

双硬盘备份的一种可行方案

双硬盘备份有什么优势弊端? 事物总有两面性,那么对于双硬盘数据备份任务来说,有什么优势与弊端呢? ◉ 双硬盘备份的优势: 安全性更好:由于数据备份到两个不同的硬盘,所以可以保证备份数据的冗…

基于springboot实现图书馆管理系统项目【项目源码+论文说明】

基于springboot实现图书馆管理系统演示 摘要 电脑的出现是一个时代的进步,不仅仅帮助人们解决了一些数学上的难题,如今电脑的出现,更加方便了人们在工作和生活中对于一些事物的处理。应用的越来越广泛,通过互联网我们可以更方便地…

练习 1 Web EasySQL极客大挑战

CTF Week 1 EasySQL极客大挑战 BUUCTF 典中典复习 Web SQL 先尝试输入,找一找交互页面 check.php 尝试万能语句 a’ or true SQL注入:#和–的作用 get传参只能是url编码,注意修改编码,输入的字符串要改成url格式。 POST请求和…

Linux:Kubernetes(k8s)——基础理论笔记(1)

我笔记来源的图片以及共享至GitHub,本章纯理论。这是k8s中部分的基础理论 👇 KALItarro/k8spdf: 这个里面只有一个pdf文件 (github.com)https://github.com/KALItarro/k8spdf👆 什么是kubernetes kubernetes 是一个开源的,用于管…

Unity(第十一部)场景

游戏有多个场景组成(新手村,某某副本,主城) 场景是有多个物体组成(怪物,地形,玩家等) 物体是有多个组件组成(刚体组件,自定义脚本) 创建场景 编辑…

Intel SGX 概述 --潦草笔记

文章目录 前言一、SGX介绍1.1 指令介绍1.2 数据结构 二、内存保护过程2.1 enclave页面缓存(EPC)2.2 Enclave页面缓存映射(EPCM) 三、部署SGX参考资料 前言 SGX是Intel开发的新的处理器技术,可以在计算平台上提供一个可…

华为s5720s-28p-power-li-ac堆叠配置

叠物理约束: • 连线推荐示意图选用产品子系列中固定的一款设备做示例,与选择产品时指定型号的外观可能不同。示意图主要用于让用户了解相同子系列设备可以用作堆叠的端口的位置,以及使用不同的连线方式时如何连接设备上的端口。因此&#xf…

Spring 类型转换、数值绑定与验证(三)— Formatting 与 Validation

1 Formatting 在Spring中用于格式化数据及根据地域展示不同格式的数据。 图 Formatting接口 UML 1.1 注解驱动Formatting 自定义像“DateTimeFormat”注解来对相关字段格式化的步骤为: 自定义注解。定义一个实现AnnotationFormatterFactory接口的工厂类。往容器…

使用Playwright的selector方法快速定位网页元素(CSS选择器)

pytest-playwright 是一个用于在 Python 中使用 Playwright 进行自动化测试的工具。它结合了 Pytest 测试框架和 Playwright 浏览器自动化工具,为您提供了在编写和执行自动化测试时的便利性和灵活性。 通过 pytest-playwright,您可以编写基于 Pytest 的…