python中的多线程和多进程
一、简单理解一下线程和进程
一个进程中可有多个线程,线程之间可共享内存,进程间却是相互独立的。打比方就是,进程是火车,线程是火车厢,车厢内人员可以流动(数据共享)
二、python中的多线程和多进程
当遇到大文件读写或处理计算时,需要加速,则用上多线程和多进程,最常见的例子是网页爬虫,每次访问后等待时间很长,所以用了异步访问。
先说结论,多线程适合IO密集型任务,多进程适合计算密集型任务。
在python中,遇到IO操作,GIL(全局解释锁)会被释放,执行下一个操作,此时用到线程即可,如果开辟进程的话,需要分配初始化的时间和空间。计算密集型用线程则不行,因为若一个计算任务没有完成时,锁不会释放,所以线程相当于串行了。借用知乎上的比喻,有一个水池,4个泵,1个人,人同时只能操作一个泵,则此时相当于串行,但如果泵的工作冷却时间比为1:3,则利用率可以达到100%,其中冷却时间相当于IO操作的等待时间,此时多线程有效。
很多时候python多线程加速有限,除非是IO密集型场景,如爬虫访问网页。
三、python代码
多进程:from multiprocessing import Pool
pool = Pool(5)
多线程:from multiprocessing.pool import ThreadPool
pool = TreadPool(5)
四、代码模板
注意pool.apply_async的用法(异步执行)
可视化操作用到pbar
pool.close() #关闭进程池/线程池
pool.join() #阻塞主进程,等待所有子进程结束后再运行
其他话:有时候在jupyterlab中大数据操作时,感觉会有进程间锁死的奇怪问题,或者加速效果不明显的问题,仍需要研究
from multiprocessing import Pool
from multiprocessing.pool import ThreadPool import math
import datetime from tqdm import tqdm
from multiprocessing import Pool, cpu_count
import os, time, random def func(num):
name = num
#for i in tqdm(range(5), ncols=80, desc='执行任务' + str(name) + ' pid:' + str(os.getpid())):
for i in range(5):
# time.sleep(random.random() * 3)
time.sleep(1)
print("finished")
pbar.update() print("cpu_count():",cpu_count())
pool = Pool(10) start = time.time()
with tqdm(total=50) as pbar:
for i in (range(50)):
pool.apply_async(func, args=(i,))
pool.close()
pool.join() end = time.time()
print("\n应用多进程耗时: %0.2f seconds" % (end - start)) print("over")
python中的多线程和多进程的更多相关文章
- python中的多线程和多进程编程
注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并 ...
- python中的多线程与多进程
线程概念: 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位. 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其 ...
- Python系列之多线程、多进程
线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供 ...
- python之路-----多线程与多进程
一.进程和线程的概念 1.进程(最小的资源单位): 进程:就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 程序:我们编写的程序用来描述进程要完成哪些功能以 ...
- python基础之多线程与多进程(二)
上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...
- python分别使用多线程和多进程获取所有股票实时数据
python分别使用多线程和多进程获取所有股票实时数据 前一天简单介绍了python怎样获取历史数据和实时分笔数据,那么如果要获取所有上市公司的实时分笔数据,应该怎么做呢? 肯定有人想的是,用一个 ...
- 第十章:Python高级编程-多线程、多进程和线程池编程
第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...
- python爬虫之多线程、多进程+代码示例
python爬虫之多线程.多进程 使用多进程.多线程编写爬虫的代码能有效的提高爬虫爬取目标网站的效率. 一.什么是进程和线程 引用廖雪峰的官方网站关于进程和线程的讲解: 进程:对于操作系统来说,一个任 ...
- python中的多线程【转】
转载自: http://c4fun.cn/blog/2014/05/06/python-threading/ python中关于多线程的操作可以使用thread和threading模块来实现,其中th ...
随机推荐
- php获取快手视频id
<?php $url = "http://www.gifshow.com/s/xxxxxx"; //初始化 $curl = curl_init(); //设置抓取的url c ...
- 17flask分页
一,flask_sqlachemy的使用 如果想要展示出来的页面是分页显示,则首先需要知道每页应该分多少个条目,然后通过数据库去查找对应的条数,同时也需要和分页所需的"paginate&qu ...
- linux netfilter nat1
linux netfilter nat1 2020整理云笔记上传
- 聊一聊Token
阔别了一阵,再次提笔,有些感慨. 聊聊Token吧,以前工作中总是遇到. 首先明确什么是token? 一些关键标签:服务端签发的一个字符串,客户端的请求令牌,用户第一次使用用户名密码登录后生成,在to ...
- typora 图片存储在COS
背景 一直在使用的markdown编辑器:typora ,在其内部图片默认是存储在本机C盘中的,现想将图片方放到云端存储,节省存储空间 方法 将typora中的图片上传到腾讯云的COS中 参考:链接 ...
- Python_字符串处理方法
1.字符串转换 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' print sStr2 1.字符串复制 #s ...
- Qiskit 安装指南
内容参考官方文档 https://qiskit.org/documentation/install.html conda create -n name_of_my_env python=3 创建虚拟环 ...
- Java web 自动备份数据库和log4j日志
利用监听自动备份 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns: ...
- [web安全原理分析]-SSRF漏洞入门
SSRF漏洞 SSRF漏洞 SSRF意为服务端请求伪造(Server-Side Request Forge).攻击者利用SSRF漏洞通过服务器发起伪造请求,就这样可以访问内网的数据,进行内网信息探测或 ...
- tp5 删除图片以及文件
控制器调用 /** * [delimg 删除单张图片] * @return [type] [description] */ public function delimg(){ if (request( ...