爬虫基础知识(一)多线程与threading模块

本文深入探讨Python中的多线程与`threading`模块,讲解并发、并行、进程与线程的基本概念,以及如何使用`threading`模块创建和管理线程。通过实例展示了线程的并发执行、线程安全与锁机制,揭示了Python多线程中的GIL限制。
摘要由CSDN通过智能技术生成

点击上方“蓝字”关注我们,第一时间推送优质文章!

前言

“本期带来的文章是python中多线程与threading模块的主要内容。主要分为「并发与并行」,「进程与线程」,「python实现多线程」三块内容。”

本文约5k字,预计阅读25分钟。

并发与并行

如果本科学过《操作系统》的话,应该记得操作系统具有 「四大基本特征」:并发、共享、虚拟、异步。其中正是因为系统中的程序能「并发执行」这一特征,才使得操作系统能有效地提高系统中的资源利用率,增加系统的 「吞吐量」(吞吐量是指系统在单位时间内处理请求的数量)。

并发(Concurrency)与并行(parallel)是既相似又有区别的两个概念:

  • 「并发」:是指两个或多个程序指令在同一时间间隔内发生。如果在单CPU处理器的系统下,每一时刻有且只能有一道程序指令执行,故微观上这些程序只能是分时地交替执行。例如,在1秒钟内,0~15ms程序A运行;15~30程序B运行;30~60ms程序C运行。因此1秒内,在宏观上(人的感官)有3道程序在同时运行,但在微观上,程序A、B、C是分时地交替执行的。但如果在多CPU处理器下,可以并发执行的程序可以被分配到多个CPU上,实现并行执行,这样多个程序可以同时进行。

  • 「并行」:是指两个或多个程序指令在同一时刻发生。只有在多处理器(CPU)系统下才能实现并行性;

进程与线程

在一个未引入进程的操作系统中,同一个应用程序中包含计算程序和IO程序,但是它们只能顺序执行,即只有执行完计算程序,才运行执行IO程序,反之亦然。这就引入了 「进程(Process)」 的概念。

进程是指在系统中能独立运行并作为资源分配的基本单位,是一个能独立运行的活动实体。多个进程之间可以并发执行和交换信息。拿上述例子来说,系统会对计算程序和IO程序分别建议一个进程,这样它们就可以并发执行(交替执行),IO程序不用再去等待计算程序执行完再执行,这样便能够提高系统资源利用率,增加系统吞吐量。

操作系统中引入进程的目的是使多个程序能够并发执行,那么再引入 「线程」,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。

一个进程A被分为a,b,c三段(因为一个进程不可能就一条逻辑),能够并发执行,就是先执行a段,等下一次CPU分配给他时,就在之前的基础上完成b段,再下一次就是c段。具体来说需要经过创建进程(分配资源)、撤销进程、切换进程(切换进程时肯定需要保存上一个进程的上下文环境,不保存,下一次调用这个进程就不知道从哪开始执行)。而线程是把进程切分为更小的时间段,进程是粗粒度的,线程就是细粒度的,线程之间可以共享同一个进程的上下文环境,CPU执行就不需要进行上下文切换了。上述所说的a,b,c就是线程,减少了每次切换上下文的时空开销。

Python实现多线程

在python并发执行中,「threading」模块是基于线程的并行,该模块是在较低级的模块「 _thread」 基础上建立较高级的模块。

引入包:

import threading
import time
from threading import Thread

threading模块下的函数

  • threading.active_count():返回当前存活的线程类Thread对象。返回的计数等于 enumerate() 返回的列表长度。

  • threading.current_thread():返回当前对应调用者的控制线程的Thread对象。

  • threading.enumerate():以列表形式返回当前所有存活的Thread对象。该列表包含守护线程,current_thread() 创建的虚拟线程对象和主线程。它不包含已终结的线程和尚未开始的线程。

  • threading.main_thread():返回主Thread对象。一般情况下,主线程是Python解释器开始时创建的线程。

  • threading.get_ident():返回当前线程的 “线程标识符”。它是一个非零的整数。它的值没有直接含义ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值