Python多线程编程是怎样的,进程和线程优缺点是什么
Admin 2022-07-15 群英技术资讯 1532 次浏览
很多朋友都对“Python多线程编程是怎样的,进程和线程优缺点是什么”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!进程的概念:
进程是资源分配的最小单位,他是操作系统进行资源分配和调度运行的基本单位。通俗理解:一个正在运行的一个程序就是一个进程。例如:正在运行的qq、wechat等,它们都是一个进程。
进程的创建步骤
1.导入进程包
import multiprocessing
2.通过进程类创建进程对象
进程对象 = multiprocessing.Process()
3.启动进程执行任务
进程对象.start()
import multiprocessing
import time
def sing():
for i in range(3):
print("唱歌。。。")
time.sleep(0.5)
def dance():
for i in range(3):
print("跳舞。。。")
time.sleep(0.5)
if __name__ == '__main__':
time1 = time.time()
s1 = multiprocessing.Process(target=sing)
d1 = multiprocessing.Process(target=dance)
s1.start()
d1.start()
s1.join() #这个方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步
d1.join()
print(time.time()-time1)
带有参数的进程
args元组,kwargs字典
import multiprocessing
import time
def sing(name, num):
for i in range(num):
print("%s在唱歌。。。"%name)
time.sleep(0.5)
def dance(num):
for i in range(num):
print("跳舞。。。")
time.sleep(0.5)
if __name__ == '__main__':
# 以元组形式传参
s1 = multiprocessing.Process(target=sing, args=('小明', 3))
# 以字典形式传参
d1 = multiprocessing.Process(target=dance, kwargs={"num": 5, })
s1.start()
d1.start()
进程的注意点
主进程会等待所有的子进程执行结束在结束
设置守护主进程
主进程结束后不会再继续执行子进程中剩余的工作 work_process = multiprocessing.Process(target=work, daemon=True)
线程的介绍
实现多任务的另一种形式
线程是程序执行的最小单位
同属一个进程的多个线程共享进程所拥有的全部资源
线程的创建步骤
导入线程包
import threading
通过线程类创建进程对象
线程对象 = threading.Thread()
启动线程执行任务
线程对象.start()
1.进程优缺点:
优点:可以用多核,可以并行
缺点:资源开销大
2.线程优缺点:
优点:资源开销小
缺点:不可用多核,依附于进程一个进程一个核
案例-多进程实现视频文件夹多任务拷贝器
需求分析:
目标文件夹是否存在,如果不存在就创建,存在则不创建
遍历源文件夹中所有文件,并拷贝到目标文件夹
采用进程实现多任务,并完成拷贝
实现步骤
定义源文件夹所在的路径,目标文件夹所在路径
创建目标文件夹
通过os.listdir获取源目录中的文件列表
遍历每个文件,定义一个函数,专门实现文件拷贝
采用进程实现多任务,完成高并发拷贝
import os
import multiprocessing
def copy_file(file_name, source_dir, dest_dir):
# 1 拼接源文件路径和目标文件路径
source_path = source_dir + '\\' + file_name
dest_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:
break
if __name__ == '__main__':
# 1 定义源文件夹和目标文件夹
source_dir = r'E:\TCT\TIFF_tran\pos_1'
dest_dir= r'F:\目标文件夹'
# 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()
#线程
import os
import threading
def copy_file(file_name, source_dir, dest_dir):
# 1 拼接源文件路径和目标文件路径
source_path = source_dir + '\\' + file_name
dest_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:
break
if __name__ == '__main__':
# 1 定义源文件夹和目标文件夹
source_dir = r'F:\迅雷下载\视频-智能机器人从0到1系统入门课程\视频'
dest_dir= r'F:\目标文件夹'
# 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()
for file_name in file_list:
sub_thread.join()
sub_thread.join()#主线程等待所有线程结束才会结束
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
要想在Flask中处理好异常,有一套自己的异常处理机制,首先,我们必须先知道Flask自己是如何处理异常的。去flask的源码里找一找会发现,在flask源码的app.py文件下,有很多会抛出异常的方法,其中拿一个举例:
本篇文章给大家带来了关于Python的相关知识,主要介绍了python正则表达式如何实现重叠匹配,具有很好的参考价值,下面一起来看一下,希望对大家有帮助。
在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值。
这篇文章主要为大家介绍了利用Pygame模块实现的检测按键正确的小游戏:每个字母有10秒的按键时间,如果按对,则随机产生新的字符,一共60s,如果时间到了,则游戏结束。快来跟随小编一起学习一下吧
如何为list实现find方法方法1:独立函数法方法2:if三元表达式(本质同上)方法3:next(利用迭代器遍历的第二个参数)方法4:list元素bool类型Python List find方法报错TypeError:
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008