day33-进程池和线程池

进程池与线程池

开进程开线程都需要消耗资源,只不过两者比较的情况线程消耗的资源比较少

在计算机能够承受范围之内最大限度的利用计算机


什么是池?

# 在保证计算机硬件安全的情况下最大限度的利用计算机
池其实是降低了程序的运行效率 但是保证了计算机硬件的安全
(硬件的发展跟不上软件的速度)

 

线程池进程池

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import time
import os# pool = ThreadPoolExecutor(5)  # 括号内可以传参数指定线程池内的线程个数
# # 也可以不传  不传默认是当前所在计算机的cpu个数乘5
pool = ProcessPoolExecutor()  # 默认是当前计算机cpu的个数
"""
池子中创建的进程/线程创建一次就不会再创建了
至始至终用的都是最初的那几个
这样的话节省了反复开辟进程/线程的资源
"""def task(n):print(n,os.getpid())  # 查看当前进程号time.sleep(2)return n**2def call_back(n):print('拿到了异步提交任务的返回结果:',n.result())
"""
提交任务的方式同步:提交任务之后 原地等待任务的返回结果 期间不做任何事异步:提交任务之后 不等待任务的返回结果(异步的结果怎么拿???) 直接执行下一行代码
"""# pool.submit(task,1)  # 朝线程池中提交任务   异步提交
# print('主')
"""
异步回调机制:当异步提交的任务有返回结果之后,会自动触发回调函数的执行"""
if __name__ == '__main__':t_list = []for i in range(20):res = pool.submit(task,i).add_done_callback(call_back)  # 提交任务的时候 绑定一个回调函数 一旦该任务有结果 立刻执行对于的回调函数# print(res.result())  # 原地等待任务的返回结果
        t_list.append(res)# pool.shutdown()  # 关闭池子 等待池子中所有的任务执行完毕之后 才会往下运行代码# for p in t_list:#     print('>>>:',p.result())

 

协程

#串行执行 0.8540799617767334
# import time
#
# def func1():
#     for i in range(10000000):
#         i+1
#
# def func2():
#     for i in range(10000000):
#         i+1
#
# start = time.time()
# func1()
# func2()
# stop = time.time()
# print(stop - start)#基于yield并发执行  1.3952205181121826
# import time
# def func1():
#     while True:
#         10000000+1
#         yield
#
# def func2():
#     g=func1()
#     for i in range(10000000):
#         time.sleep(100)  # 模拟IO,yield并不会捕捉到并自动切换
#         i+1
#         next(g)
#
# start=time.time()
# func2()
# stop=time.time()
# print(stop-start)"""
需要找到一个能够识别IO的一个工具gevent模块
"""
from gevent import monkey;monkey.patch_all()  # 由于该模块经常被使用 所以建议写成一行
from gevent import spawn
import time
"""
注意gevent模块没办法自动识别time.sleep等io情况
需要你手动再配置一个参数
"""def heng():print("")time.sleep(2)print('')def ha():print('')time.sleep(3)print('')def heiheihei():print('嘿嘿嘿')time.sleep(5)print('嘿嘿嘿')start = time.time()
g1 = spawn(heng)
g2 = spawn(ha)  # spawn会检测所有的任务
g3 = spawn(heiheihei)
g1.join()
g2.join()
g3.join()
# heng()
# ha()
print(time.time() - start)

进程:资源单位
线程:执行单位
协程:单线程下实现并发

并发
切换+保存状态
ps:看起来像同时执行的 就可以称之为并发

协程:完全是程序员自己意淫出来的名词
单线程下实现并发
TCP单线程实现并发

服务端

from gevent import monkey;monkey.patch_all()
import socket
from gevent import spawnserver = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)def talk(conn):while True:try:data = conn.recv(1024)if len(data) == 0:breakprint(data.decode('utf-8'))conn.send(data.upper())except ConnectionResetError as e:print(e)breakconn.close()def server1():while True:conn, addr = server.accept()spawn(talk,conn)if __name__ == '__main__':g1 = spawn(server1)g1.join()

 

客户端

import socket
from threading import Thread,current_threaddef client():client = socket.socket()client.connect(('127.0.0.1',8080))n = 0while True:data = '%s %s'%(current_thread().name,n)client.send(data.encode('utf-8'))res = client.recv(1024)print(res.decode('utf-8'))n += 1for i in range(400):t = Thread(target=client)t.start()

 


并发的条件?
多道技术
空间上的复用
时间上的复用
切换+保存状态

程序员自己通过代码自己检测程序中的IO
一旦遇到IO自己通过代码切换
给操作系统的感觉是你这个线程没有任何的IO
ps:欺骗操作系统 让它误认为你这个程序一直没有IO
从而保证程序在运行态和就绪态来回切换
提升代码的运行效率


切换+保存状态就一定能够提升效率吗???
当你的任务是iO密集型的情况下 提升效率
如果你的任务是计算密集型的 降低效率


yield 保存上一次的结果


多进程下开多线程
多线程下再开协程


IO模型(了解)

转载于:https://www.cnblogs.com/Ryan-Yuan/p/11357850.html

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

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

相关文章

【转】常用数学函数篇(Linux c)

abs&#xff08;计算整型数的绝对值&#xff09; 相关函数 labs, fabs 表头文件 #include<stdlib.h> 定义函数 int abs (int j) 函数说明 abs()用来计算参数j的绝对值&#xff0c;然后将结果返回。 返回值 返回参数j的绝对值结果。 范例 #ingclude <stdlib.h> main…

两大头号玩家 一个伟大愿景: 联邦学习的元生态建设美好世界

来源&#xff1a;IEEE标准协会新年伊始&#xff0c;世界领先的标准制定机构IEEE标准协会牵头&#xff0c;组织了2022年度联邦学习领域首场重量级尖峰交流活动——联邦学习首创团队带头人、谷歌研究院副总裁Blaise Agura y Arcas博士&#xff0c;与联邦学习亚洲奠基人、IEEE联邦…

物理学的过去、现在与未来

来源&#xff1a;中科院之声&#xff08;ID:zkyzswx&#xff09;、《物理》杂志、中国物理学会期刊网作者&#xff1a;冯端&#xff08;我国著名物理学家、金属和晶体材料学家、教育家&#xff0c;中国科学院院士、第三世界科学院院士、第五届中国物理学会理事长&#xff0c;南…

Android UI之困 横跨四个屏幕的战争

用户界面&#xff08;UI&#xff09;的话题&#xff0c;总是会带来强烈的争论。这有点像电视领域——每个人都是专家&#xff0c;因为每个人都是用户。早在2002年&#xff0c;电信运营商就有一套自己的UI定制界面——例如Vodafone Live 和 Orange SPV。当然&#xff0c;这遭到很…

《MIT科技评论》:2022年全球十大突破性技术

来源&#xff1a;6G俱乐部资料来源&#xff1a;《麻省理工科技评论》近日&#xff0c;《麻省理工科技评论》2022年“全球十大突破性技术”正式发布。此次发布的突破性技术包括&#xff1a;“新冠口服药”“实用型聚变反应堆”“终结密码”“AI蛋白质折叠”“PoS权益证明”“长时…

day34 数据库入门

数据库概念 # 1.随意的存到了一个文件中 数据格式也是千差万别的 # 2.软件开发目录规范规定了数据存放的位置ps:数据都是保存在本地的 # 3.将保存数据的部分 存到一个公共的地方 所有的用户涉及到数据相关 都必须来这个公共地方查找 数据库之MySQL # 本质就是一款基于网络通信的…

PNAS前沿:迈向作为多层学习的进化理论

来源&#xff1a;集智俱乐部作者&#xff1a;郭瑞东编辑&#xff1a;邓一雪导语进化、学习与物理系统的重整化有何相似之处&#xff1f;PNAS的论文“构建将进化视作多层学习的理论”一文&#xff0c;经由统一的理论框架&#xff0c;分析进化过程中的环境预测误差&#xff0c;及…

09.MyBatis的逆向工程

逆向工程:(通过表自动生成实体类和映射文件) 1.导入mybatis-generator-core-1.3.2.jar的jar包 2.在src下创建并编写配置文件&#xff0c;如下&#xff0c; generator.xml 1 <?xml version"1.0" encoding"UTF-8"?>2 <!DOCTYPE generatorConfigur…

「Luogu5395」【模板】第二类斯特林数·行

「Luogu5395」【模板】第二类斯特林数行 problem Solution 一句话题意&#xff1a;求\(_{i0}^n\begin{Bmatrix}n\\i\end{Bmatrix}\) 根据第二类斯特林数的展开式&#xff0c;有\[\begin{Bmatrix}n\\k\end{Bmatrix}\frac{1}{k!}\sum_{i0}^k(-1)^i\begin{pmatrix}k\\i\end{pmatri…

【前瞻】Nature:2022年7大“颠覆性”技术

来 源&#xff1a;中国科学报 作 者&#xff1a;文乐乐 近日&#xff0c;《自然》对“可能在未来一年对科学产生影响”的7项技术进行了综述。这7项技术分别是完整版基因组、蛋白质结构解析、量子模拟、精准基因组调控、靶向基因疗法、空间多组学、基于CRISPR的诊断。完整版基因…

day35-mysql之表的详细操作

表操作 1.数据类型 建表的时候&#xff0c;字段都有对应的数据类型 # 整型 # 浮点型 # 字符类型(char与varchar) # 日期类型 # 枚举与集合 2.约束条件 # primary key # unique key # not null 创建表的完整语法&#xff1a; create table 表名( 字段名1 类型[(宽度) 约束条件],…

重磅!Nature子刊发布稳定学习观点论文:建立因果推理和机器学习的共识基础...

来源&#xff1a;AI科技评论整理&#xff1a;AI科技评论2月23日&#xff0c;清华大学计算机系崔鹏副教授与斯坦福大学Susan Athey&#xff08;美国科学院院士&#xff0c;因果领域国际权威&#xff09;合作&#xff0c;在全球顶级期刊Nature Machine Intelligence&#xff08;影…

卸载mysql

先停止所有mysql有关进程。 打开控制台:依次输入以下命令 sudo rm /usr/local/mysqlsudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOMsudo rm -rf /Library/PreferencePanes/My*vim /etc/hostconfig and removed the line MYSQLCOM-YES-rm -rf ~/Libr…

​数据集拥有自己的世界观?不,其实还是人的世界观

来源&#xff1a; AI科技评论编译&#xff1a;Antonio编辑&#xff1a;陈彩娴伴随深度学习的不断日常化&#xff0c;数据集中的偏见&#xff08;bias&#xff09;和公正性&#xff08;fairness&#xff09;已经成为一个热门研究方向。偏见在AI领域是一个很棘手的话题&#xff1…

day36-表关系(外键)

1 表关系之外键 1.1 前戏之一对多关系 # 定义一张部门员工表 id name gender  dep_name dep_desc 1 jason male 教学部 教书育人 2 egon male 外交部 漂泊游荡 3 tank male 教学部 教书育人 4 kevi…

图灵奖获得者Yann LeCun:未来几十年AI研究的最大挑战是「预测世界模型」

来源&#xff1a;机器学习研究组订阅LeCun 认为&#xff0c;构造自主 AI 需要预测世界模型&#xff0c;而世界模型必须能够执行多模态预测&#xff0c;对应的解决方案是一种叫做分层 JEPA&#xff08;联合嵌入预测架构&#xff09;的架构。该架构可以通过堆叠的方式进行更抽象、…

总结出来的一些ASP.NET程序性能优化的注意事项[不断补充]

只是提了一个基本概念&#xff0c;具体要点要是需要查找资料。本文的各个要点&#xff0c;都是从网上大量文章中总结出来。参考资料&#xff1a;http://www.cnblogs.com/lxinxuan/archive/2006/11/06/551980.htmlasp.net程序性能优化总结 ——备忘具体技术 细节请查询 1. …

可重构人工智能设备展现出智能化前景

PURDUE UNIVERSITY来源&#xff1a;IEEE电气电子工程师一项新的研究发现&#xff0c;一种适应性强的新设备可以转换成人工智能硬件所需的所有关键电子元件&#xff0c;在机器人和自治系统中有潜在的应用。以大脑为灵感或“神经形态”的计算机硬件旨在模仿人脑从经验中自适应学习…

gin+vue的前后端分离开源项目

该项目是ginvue的前后端分离项目&#xff0c;使用gorm访问MySQL&#xff0c;其中vue前端是使用vue-element-admin框架简单实现的&#xff1b; go后台使用jwt&#xff0c;对API接口进行权限控制。此外&#xff0c;Web页面在token过期后的半个小时内&#xff0c;用户再次操作会自…

day37-数据库分组查询

1. 单表查询 2. 多表查询 ## 单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum(male,female) not null default male, #大部分是男的 age int(3) unsigned not null default 28, hire_date date not null, …