Python多线程编程(详细:适合小白入门)

article/2025/9/16 5:39:58

目录

前言

一、进程

1.多任务

2.进程

3.多进程完成多任务

3.1进程的创建步骤

3.2通过进程类创建进程对象

3.3创建进程和启动的代码

4. 进程执行带有参数的任务

5.获取进程编号

6.进程的注意点

6.1主进程会等待所有的子进程执行结束后再结束

6.2设置守护主进程(主完子销)

二、多进程实现视频文件夹高并发copy器

三、线程

1.多任务

2.多线程完成多任务

2.1线程的创建步骤

2.2通过线程类创建线程对象

2.3线程创建与启动代码

3.线程执行有参数的任务(和进程基本一样)

4.主线程和子线程的结束顺序

4.1主线程会等待所有的子线程执行结束后再结束(同进程一样)

4.2设置守护子线程(主完子销)(同进程一样)​

 5.线程间的执行顺序

 5.1获取当前的线程信息

四、多线程实现视频文件夹高并发copy器

五、进程和线程对比

总结(其他博客总结)


前言

这篇博客的笔记摘录自B站黑马程序员的《python多线程编程》的视频,原视频的地址如下:(博客中的代码全是我手敲的,运行皆可通过,若有错误,欢迎评论指出)

https://www.bilibili.com/video/BV1fz4y1D7tU?spm_id_from=pageDriver

在学习多线程编程之前,需要学会:基础语法、文件操作、模块应用

开发工具:PyCharm

内容安排:进程、线程、多任务应用

一、进程

1.多任务

同一时间内执行多个任务

主要有两种方式:

① 并发(在一段时间内交替去执行多个任务:任务数量大于CPU核心数<切换速度很快>)

② 并行(在一段时间内真正同时一起执行多个任务:任务数量小于或等于CPU核心数

2.进程

进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解,一个正在运行的程序就是一个进程,例如正在运行的QQ……

程序是静态,进程是动态

3.多进程完成多任务

3.1进程的创建步骤

        ①导入进程包import multiprocessing②通过进程类创建进程对象进程对象 = multiprocessing.Process()③启动进程执行任务进程对象.start()

3.2通过进程类创建进程对象

3.3创建进程和启动的代码

 实例:

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:02-使用多进程实现多任务.py
'''# 1.导入包和模块
import multiprocessing
import timedef sing():for i in range(3):print("i am sing ooo~")time.sleep(0.5)def dance():for i in range(3):print("i am dance lll~")time.sleep(0.5)if __name__ == '__main__':# 2.使用进程类创建进程对象# target :指定进程执行的函数名,不加括号sing_process = multiprocessing.Process(target=sing)dance_process = multiprocessing.Process(target=dance)# 3. 使用进程对象启动进程执行指定任务sing_process.start()dance_process.start()

 结果:

4. 进程执行带有参数的任务

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:03-进程中执行带有参数的任务.py
'''# 1.导入包和模块
import multiprocessing
import timedef sing(num, name):for i in range(num):print(name)print("---i am sing ooo~")time.sleep(0.5)def dance(num, name):for i in range(num):print(name)print("i am dance lll~")time.sleep(0.5)if __name__ == '__main__':# 2.使用进程类创建进程对象# target:指定进程执行的函数名,不加括号# args:使用元组方式给指定任务传参,顺序一致(参数顺序)# kwargs:使用字典的方式给指定任务传参,名称一致(参数名称)sing_process = multiprocessing.Process(target=sing, args=(3, "猪猪"))dance_process = multiprocessing.Process(target=dance, kwargs={"name": "珊珊", "num": 2})# 3. 使用进程对象启动进程执行指定任务sing_process.start()dance_process.start()

 

5.获取进程编号

当进程中的进程数量越来越多时,如果没有办法区分主进程和子进程,那么就无法进行有效的进程管理,为了方便管理实际上每个进程都是自己编写的

 获取进程编号的两种方式:

        ① 获取当前进程编号

                os.getpid()

        ② 获取当前父进程编号

                os.getppid()

 

 

 

6.进程的注意点

6.1主进程会等待所有的子进程执行结束后再结束

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:06-进程注意点.py
'''# 1.导入包和模块
import multiprocessing
import timedef work():# 子进程工作2秒for i in range(10):print("工作中…")time.sleep(0.2)if __name__ == '__main__':work_process = multiprocessing.Process(target=work)work_process.start()# 主进程睡眠1秒time.sleep(1)print("主进程执行完……")

 

6.2设置守护主进程(主完子销)

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:07-进程注意点-设置守护主进程.py
'''# 1.导入包和模块
import multiprocessing
import timedef work():# 子进程工作2秒for i in range(10):print("工作中…")time.sleep(0.2)if __name__ == '__main__':work_process = multiprocessing.Process(target=work)# 设置守护主进程,主进程退出后子进程直接销毁,不再执行子进程的代码work_process.daemon = Truework_process.start()# 主进程睡眠1秒time.sleep(1)print("主进程执行完……")

 

二、多进程实现视频文件夹高并发copy器

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:08-案例-视频文件视频的拷贝.py
'''# 1.导入包和模块
import multiprocessing
import osdef copy_file(file_name, source_dir, dest_dir):print(file_name, "--拷贝的进程pid是:", os.getpid())# 1.拼接源文件路径和目标文件所在的路径source_path = source_dir + "/" + file_namedest_path = dest_dir + "/" + file_name# 2.打开源文件和目标文件with open(source_path, "rb") as source_file:with open(dest_path, "wb") as dest_file:# 3.循环读取源文件到目标路径while True:data = source_file.read(1024)if data:dest_file.write(data)else:breakif __name__ == '__main__':# 1.定义源文件夹和目标文件夹source_dir = "源文件夹"dest_dir = "目标文件夹"# 2.创建目标文件夹try:os.mkdir(dest_dir)except:print("目标文件夹已经存在!")# 3.读取源文件夹的文件列表file_list = os.listdir(source_dir)# 4.遍历文件列表实现拷贝for file_name in file_list:# copy_file(file_name, source_dir, dest_dir)# 5.使用多进程实现多任务拷贝sub_process = multiprocessing.Process(target=copy_file,args=(file_name, source_dir, dest_dir))sub_process.start()

 

三、线程

1.多任务

可以通过多线程的方式进行

进程是分配资源的最小单位,一旦创建一个进程就会分配一定的资源(打开两个QQ)

线程是程序执行的最小单元,实际上进程只负责分配资源,而利用这些资源执行程序的是线程,也就是说进程是线程的容器,一个进程中最少有一个线程来负责执行程序

线程自己不拥有系统资源,但可与同属一个进程的其他线程共享进程所拥有的全部资源(一个QQ打开两个chat窗口)

--- > 进程:

--- > 线程:

2.多线程完成多任务

2.1线程的创建步骤

        ①导入线程模块import threading②通过线程类创建进程对象线程对象 = threading.Thread(target = 任务名)③启动线程执行任务线程对象.start()

2.2通过线程类创建线程对象

2.3线程创建与启动代码

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:09-使用多线程实现多任务.py
'''import threading
import timedef sing():for i in range(3):print("i am sing ooo~")time.sleep(0.5)def dance():for i in range(3):print("i am dance lll~")time.sleep(0.5)if __name__ == '__main__':sing_thread = threading.Thread(target=sing)dance_thread = threading.Thread(target=dance)sing_thread.start()dance_thread.start()

 

3.线程执行有参数的任务(和进程基本一样)

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:10-使用多线程实现带参数的任务.py
'''import threading
import timedef sing(num):for i in range(num):print("i am sing ooo~")time.sleep(0.5)def dance(num):for i in range(num):print("i am dance lll~")time.sleep(0.5)if __name__ == '__main__':sing_thread = threading.Thread(target=sing, args=(3,))dance_thread = threading.Thread(target=dance, kwargs={"num": 2})sing_thread.start()dance_thread.start()

 

4.主线程和子线程的结束顺序

4.1主线程会等待所有的子线程执行结束后再结束(同进程一样)

4.2设置守护子线程(主完子销)(同进程一样)

 设置守护子线程有两种方式:

 

 5.线程间的执行顺序

 5.1获取当前的线程信息

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:10-线程之间执行的顺序.py
'''import threading
import timedef task():time.sleep(0.5)# current_thread:获取当前线程的线程对象thread = threading.current_thread()print(thread)if __name__ == '__main__':for i in range(5):sub_thread = threading.Thread(target=task)sub_thread.start()

四、多线程实现视频文件夹高并发copy器

 同进程不一样之处:

'''
时间:2021.8.11
作者:手可摘星辰不去高声语
名称:13-案例-视频文件视频多线程拷贝.py
'''# 1.导入包和模块
import threading
import osdef copy_file(file_name, source_dir, dest_dir):print(file_name, "--拷贝的进程pid是:", os.getpid())print(file_name, "--拷贝的线程是:", threading.current_thread())# 1.拼接源文件路径和目标文件所在的路径source_path = source_dir + "/" + file_namedest_path = dest_dir + "/" + file_name# 2.打开源文件和目标文件with open(source_path, "rb") as source_file:with open(dest_path, "wb") as dest_file:# 3.循环读取源文件到目标路径while True:data = source_file.read(1024)if data:dest_file.write(data)else:breakif __name__ == '__main__':# 1.定义源文件夹和目标文件夹source_dir = "源文件夹"dest_dir = "目标文件夹"# 2.创建目标文件夹try:os.mkdir(dest_dir)except:print("目标文件夹已经存在!")# 3.读取源文件夹的文件列表file_list = os.listdir(source_dir)# 4.遍历文件列表实现拷贝for file_name in file_list:# copy_file(file_name, source_dir, dest_dir)# 5.使用多线程实现多任务拷贝sub_thread = threading.Thread(target=copy_file,args=(file_name, source_dir, dest_dir))sub_thread.start()

五、进程和线程对比

关系对比线程是依附在进程里面的,没有进程就没有线程
一个进程默认提供一个线程,进程可以创建多个线程
区别对比创建进程的资源开销比创建线程的资源开销要大,进程可以用多核,但是线程不能用多核
进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位

总结(其他博客总结)

非常详细的一篇博客:Python中线程与进程

 ……略


http://chatgpt.dhexx.cn/article/aUKkitWC.shtml

相关文章

使用qt实现多线程编程

目录 1、线程基础 1.1、GUI线程与工作线程 1.2、数据的同步访问 2、QT多线程简介 3、QThread线程类 4、创建并启动线程 QThread类提供不依赖于平台的管理线程的方法。一个QThread类的对象管理一个线程&#xff0c;一 般从QThread继承一个自定义类&#xff0c;并重定义虚函…

ZMQ之多线程编程

使用ZMQ进行多线程编程&#xff08;MT编程&#xff09;将会是一种享受。在多线程中使用ZMQ套接字时&#xff0c;你不需要考虑额外的东西&#xff0c;让它们自如地运作就好。 使用ZMQ进行多线程编程时&#xff0c;不需要考虑互斥、锁、或其他并发程序中要考虑的因素&#xff0c;…

C++之多线程编程

一、并发的实现 1.多进程并发主要解决进程间通信的问题 ①同一电脑上&#xff1a;管道、文件、消息队列、内存共享。 ②不同电脑上&#xff1a;socket网络通信。 2. 单进程中的多个线程并发&#xff08;一个主线程多个子线程实现并发&#xff09; ①一个进程中的所有线程共享内…

Springboot异步多线程编程

文章目录 一、基础知识二、什么时候用同步&异步三、什么时候需要使用多线程四、springboot异步多线程编程实现 一、基础知识 同步&#xff1a;同步就是指一个进程在执行某个请求的时候&#xff0c;若该请求需要一段时间才能返回信息&#xff0c;那么这个进程将会一直等待下…

【线程】多线程编程

目录 一、概念 1.进程与线程的区别是&#xff1f;&#xff08;常问&#xff09; 2.线程与fork系统调用 3.线程的优缺点 4.线程的实现方式 二、线程函数 1.pthread_create 2.pthread_exit 3.pthread_join 4.pthread_cancel 三、线程的使用 1.线程的基本操作 2.并发…

多线程编程及线程间通信机制

对进程线程的印象还是比较好的,这对于学习C高级的朋友是非常重要的,怎样更快的学习到线程的具体使用呢?最好的办法自然是练习再练习,然后还要看很多的代码才是,之前又听说了一个IT同行过劳死,特别的提醒广大的IT从业者,要注意合理的作息习惯,健康才是最重要的,下面结合…

多线程编程

多线程指的是一个程序中包含两个或者两个以上的线程&#xff0c;多线程的提出是为提高代码的执行效率&#xff0c;这就好比工厂中的流水线&#xff0c;只有一条称为单线程&#xff0c;有多条流水线就称为多线程。多线程提高效率的同时由于并发执行的不确定性&#xff0c;导致出…

两种 C++ 多线程编程方式,看完不懂打我...

多线程在实际编程中的重要性不言而喻&#xff0c;对 C 而言&#xff0c;当我们需要使用多线程时&#xff0c;有多种方案可供选择。比如 POSIX 线程 pthread、boost::thread 库、C11 开始支持的 std::thread 库&#xff0c;以及其他一些第三方库 libdispatch&#xff08;GCD&…

ARP攻击模拟工具

以下是本人平时的一些小作品&#xff0c;特此和大家一起分享... ARP攻击模拟工具 第一代 说明&#xff1a; 实现模拟以太网的ARP欺骗攻击和IP地址冲突攻击。 此为本人早期作品&#xff0c;固比较简陋和不完善&#xff0c;漏洞及错误之处可能较多请多多包涵&#xff01; 开发环…

ARP断网攻击

在之前的文章当中&#xff0c;我已经向大家介绍了关于ARP的欺骗原理。再进一步&#xff0c;将其中的原理运用到实战中去&#xff0c;又会有什么效果呢&#xff1f;ARP又可以给我们带来哪些具体的作用呢&#xff1f;毕竟实践要来支撑&#xff0c;我们之前学过的ARP欺骗原理。 我…

ARP-欺骗攻击

测试环境&#xff08;kali:192.168.189.7 win7:192.168.189.6 网关:192.168.189.2&#xff09; arpspoof -i eth0 -t 192.168.189.6 192.168.189.2 &#xff08;目标地址网关地址&#xff09; 接收获取的信息 随意登陆一个网站&#xff0c;可发现用户名及密码已被获取。可以…

ARP攻击原理及解决方法,很实用

故障原因】 局域网内有人使用ARP欺骗的木马程序&#xff08;比如&#xff1a;传奇盗号的软件&#xff0c;某些传奇外挂中也被恶意加载了此程序&#xff09;。 【故障原理】 要了解故障原理&#xff0c;我们先来了解一下ARP协议。 在局域网中&#xff0c;通过ARP协议来完成I…

ARP攻击怎么解决最安全

ARP攻击是指攻击者通过伪造网络中的ARP协议数据包&#xff0c;欺骗其他计算机的网络通信&#xff0c;从而实现中间人攻击等目的。 下面是ARP攻击的解决方法&#xff1a; 静态ARP表绑定MAC地址&#xff1a;在网络管理员的控制下&#xff0c;将主机的IP地址与MAC地址进行绑定&am…

ARP攻击及原理

ARP攻击原理:但凡局域网内存在arp攻击&#xff0c;说明网络存在“中间人” 1.PC1需要跟PC2通信&#xff0c;通过ARP请求包询问PC2的MAC地址&#xff0c;由于采用广播的形式&#xff0c;所以交换机会将ARP请求包从接口PC1广播到PC2和PC3。(注&#xff1a;交换机收到广播/组播/未…

ARP攻击、欺骗及防御

一、广播与广播域概述 1、广播与广播域 广播&#xff1a;将广播地址做为目的地址的数据帧。 广播域&#xff1a;网络中能接收到同一个广播所有节点的集合。 2、MAC地址广播 广播地址为FF-FF-FF-FF-FF-FF 3、IP地址广播 1&#xff09;255.255.255.255 2&#xff09;广播…

ARP攻击原理和kali实现ARP攻击

目录 一、ARP协议和ARP攻击1.ARP协议2.利用Wireshark分析ARP数据包3.ARP攻击 二、kali实现ARP攻击和ARP欺骗1.实验过程2.问题记录T_T 一、ARP协议和ARP攻击 1.ARP协议 ARP协议&#xff0c;地址解析协议&#xff08;Address Resolution Protocol&#xff09;&#xff0c;用来实…

怎么处理ARP攻击

ARP故障说明: ping 的时候可能好久才能接收到一个响应&#xff0c;或者说干脆就Ping不通。网络时好时坏&#xff0c;通过ARP -a命令不能看到同网段的在线用户&#xff0c;但是net view 可以看到全网开放共享的电脑名&#xff0c;这时候就需要注意了&#xff0c;可能是ARP攻击。…

网络安全--ARP攻击原理与防护

目录 一.ARP的原理 二.ARP攻击现象及危害 三.ARP攻击的原理 四.ARP防护 在局域网当中&#xff0c;有一个协议由于它的特性一旦遭受攻击就非常麻烦。首先是它的攻击门槛比较低&#xff0c;找到一些小工具就能实现攻击&#xff0c;而且危害极大。这个协议就是ARP协议。 ARP攻击是…

渗透技术——ARP攻击

Part 1: ARP攻击介绍 ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一个位于TCP/IP协议栈中的底层协议&#xff0c;负责将某个IP地址解析成对应的MAC地址。而ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗&#xff0c;能够在网络中产生…

Linux操作系统及其发行版本

文章目录 Linux是什么Liunx与WindowsLinux的发行版本1. Debian系列&#xff1a;2. Slackware系列&#xff1a;3. Redhat系列&#xff1a;4. 其他发行版本&#xff1a; Linux是什么 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、…