计算机基础知识34

进程锁

# 锁在IT界很重要,不但在Python中出现,尤其是数据库中得锁更多,比如:表锁、行锁、      悲观锁、乐观锁、进程锁、互斥锁、递归锁、可重入锁、死锁等

# 保证安全

import time     # 导入time,执行顺序乱了
from multiprocessing import Process, Lockdef task(i, lock):       # 上一把锁    lock.acquire()print("进程%s来了" % i)time.sleep(1)print("进程%s走了" % i)    lock.release()       # 释放锁"""只要你上了锁,一定别忘了最后释放锁,否则的话,别的进程永远进不来"""if __name__ == '__main__':lock=Lock()    # 得到一把锁for i in range(3):p = Process(target=task, args=(i+1, lock))p.start()

# 同一时刻只有一个进程拿到这把锁,释放后下一个进程才会拿

# 加锁虽然保证了数据的安全,执行的效率一定是降低了

              # 该加锁一定要加

如何查看进程号

    p.pid()  子进程的进程号

import time,os
from multiprocessing import Process, Lockdef task():print("task进程的进程号:", os.getpid())      print("task进程的父进程的进程号:", os.getppid())   # parent processtime.sleep(20)
if __name__ == '__main__':p=Process(target=task, )p.start()print('子进程的进程号:', p.pid)print("主进程的进程号", os.getpid())time.sleep(10)

"""有了进程号,我们就可以通过进程号来结束进程的执行   kill 9176 kill -9 9176"""

# os.getpid() 写在哪个进程里面就会输出哪个进程的进程号

# taskkill / pid 9176    相当于手动结束命令

进程之间数据隔离问题

# 进程1中的a和进程2中的a完全不一样,且不能相互使用

n=100       # 主进程n还是不变
def task():global nn=1     # 改的子进程中的n

# 进程与进程之间数据如何通信?

队列(Queue)

数据结构:链表、单链表、双链表、循环链表、栈、队列、树、二叉树、图

队列特点: 先进先出

栈的特点:先进后出          python给我们提供了一个内置的队列类

from multiprocessing import Queue
q=Queue(3)         # 超过3个会阻塞,等出一个再进
q.put('hello')
q.put('world')     # 入队:往队列里面添加数据    
print(q.get())     # hello
print(q.get())     # world 出队:从队列里面取出值
q.put(self, obj, block=True, timeout=None)

# block=False: 队列放不进数据时,会立马报错

# timeout=3:超时的时间, 如果在指定的时间内,没有放进去,就会直接报错

q.put_nowait(self,obj):    # 值放不进去会直接报错return self.put(obj,False)

print(q.get())
print(q.get())       # 三个数都取出来了
print(q.get())

print(q.get())       # 第四个会阻塞等待put输值

q.get()  和q.put用法一样       q.get_nowait()

print(q.qsize())   # 取值完为0,还剩一个没取的就是1
print(q.empty())   # 看这个队列里还有没有数据   T/F
print(q.full())    # 看队列是否满不满    T/F

# 队列里面的数据在内存中存着的

      # 专业的消息队列:kafka, rabbitmq等,他们能够解决特殊场景的问题

生产者消费者模型(重要)

# 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题

   通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度

# 通过一个容器来解决强耦合问题,生产者和消费者不直接进行通讯

                                                                               

def producer():for i in range(10):q.put("生产的第%s个包子" % i)    # 放队列
def consumer():while True:res = q.get()       # 取队列,队列没有东西会一直等待print(res)if res is None:break
from multiprocessing import Prscess, Queue
if __name__ == '__main__':p = Process(target= producer)  # 生产者p.sart()c = Process(target= consumer)  # 消费者c.start()

# 改良版本:在生产完后放一个标志位,当取到标志位,break结束

线程

# 在一个进程中,线程就是必须存在的,至少要有一个线程来执行任务

# 一个进程中可以有多个线程

# 进程和线程都是有操作系统调度的

# 进程是操作系统分配资源的基本单位,线程是操作系统执行的最小单位

开启线程:

from threading import Thread
def task(a, b):pass
if __name__ == '__main__':t=Thread(target=task, name='Thread-2', args=('a', ), kwargs={'b':1})t.daemon = True # 把该线程设置为守护线程, 主线程执行完毕,子线程也结束t.start()

# 一个进程中如果只有一个线程,该线程称之为是主线程,其他线程称之为是子线程

   本身有一个主线程,def task是主线程拉起的一个子线程

           # 先子线程后主线程,和进程相反

              开线程的资源特别小,会立刻执行

              t.join() 确保子先后主

# 守护线程:主线结束,子进程立刻结束

t.is_alive()
t.setName('aaaa')    # 改名字
t.getName('aaaa') 
t.join()
t.start()      # 与进程用法一样
t.daemon = True
t.setDaemon(True)  # 守护线程 
threading.currentThread()  # 当前线程的对象
threading.enumerate()   # 返回正在运行的线程对象列表
threading.activeCount()  # 正在运行的线程数量

进程和线程的比较:

1、进程的开销比线程的开销大很多

2、进程之间的数据是隔离的,但是,线程直接的数据不隔离

3、多个进程之间的线程数据不共享--->还是让进程通信(IPC)--->进程下的线程也通信--->队列

今日思维导图:

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

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

相关文章

服务CPU异常飙高问题分析和解决

📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

1208. 翻硬币

题目: 1208. 翻硬币 - AcWing题库 思路: 1.对于要求从A变化到B的这类题,可以采用开关控制的方法。 2.一次翻转连续两个硬币,求origin变为result 最少需要翻转多少次。我们在origin的两个硬币中间放一个开关,开关变换…

除静电感测型离子风棒在无尘车间中的应用

除静电感测型离子风棒是一种能够检测静电并及时释放离子的离子风棒,在无尘车间中应用非常广泛。以下是除静电感测型离子风棒在无尘车间中的应用: 防止静电干扰:在无尘车间中,静电干扰会影响电子元器件和仪器设备的正常工作&#x…

MySQL学习(八)——锁

文章目录 1. 锁概述2. 全局锁2.1 全局锁的必要性2.2 语法2.3 全局锁的特点 3. 表级锁3.1 表锁3.2 元数据锁3.3 意向锁3.4 自增锁 4. 行级锁4.1 介绍4.2 记录锁4.3 间隙锁4.4 临键锁 1. 锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传…

2023亚马逊下半年的旺季选品攻略,黑五网一圣诞爆单机会不再错过

万圣节、黑五、网一和圣诞节是西方重要销售活动,也是跨境电商的一场重要考试,相对于国内的双十一双十二,这些节日的形成更为久远,需求也更加深入人心!卖家需要根据市场需求和竞争情况选择细分品类,为更好的…

LabVIEW建立生产者消费者

LabVIEW建立生产者消费者 生产者/消费者设计模式由并行循环组成,这些循环分为两类:生产者循环和消费者循环。生产者循环和消费者循环间的通信可以使用队列或通道连线来实现。 队列 LabVIEW内置的队列操作VI可在函数选板>>数据通信>>队列操…

Nginx正向代理,反向代理,负载均衡

Nginx正向代理,反向代理,负载均衡 Nginx当中有两种代理方式: 七层代理(http协议) 四层代理(tcp/udp流量转发) 七层代理:七层代理,代理的是http的请求和响应 客户端请求…

开源Vue盲盒商城4.0源码/网页盲盒源码/前端uniapp后端thinkphp+安装教程/亲测

源码简介: 开源Vue盲盒商城4.0源码,它是打包小程序app的网页盲盒源码,亲测可用,它是采用vueTP5框架开发开源盲盒网站源码,附带了安装教程。 简单测试过了,可以使用,大家可以自测下。 前端uniapp后端think…

Elasticsearch Relevance Engine---为AI变革提供高级搜索能力[ES向量搜索、常用配置参数、聚合功能等详解]

Elasticsearch Relevance Engine—为AI变革提供高级搜索能力[ES向量搜索、常用配置参数、聚合功能等详解] 今天要介绍的 Elasticsearch Relevance Engine™ (ESRE™),提供了多项用于创建高度相关的 AI 搜索应用程序的新功能。ESRE 站在 Elastic 这个搜索领域的巨人…

数据库设计与前端框架

数据库设计与前端框架 学习目标: 理解多租户的数据库设计方案 熟练使用PowerDesigner构建数据库模型理解前端工程的基本架构和执行流程 完成前端工程企业模块开发 多租户SaaS平台的数据库方案 多租户是什么 多租户技术(Multi-TenancyTechnology&a…

C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包,初始代码,实现前缀和,实现前缀积,实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…

15.2 主机探测与路由追踪

Ping 使用 Internet 控制消息协议(ICMP)来测试主机之间的连接。当用户发送一个 ping 请求时,则对应的发送一个 ICMP Echo 请求消息到目标主机,并等待目标主机回复一个 ICMP Echo 回应消息。如果目标主机接收到请求并且网络连接正常…

【网络协议】聊聊从物理层到MAC层 ARP 交换机

物理层 物理层其实就是电脑、交换器、路由器、光纤等。组成一个局域网的方式可以使用集线器。可以将多台电脑连接起来,然后进行将数据转发给别的端口。 数据链路层 Hub其实就是广播模式,如果A电脑发出一个包,B、C电脑也可以收到。那么数据…

ZKP4.1 SNARKs via Interactive Proofs (Justin Thaler)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 4: SNARKs via Interactive Proofs (Justin Thaler) 4.1 Interactive Proofs: Motivation and Model Interactive Proofs P solves problem, tells V the answer. Then they have a conversation.P’s goal: convince V the …

java基础练习,九九乘法表(java版),计算器

简介 对于有了解,但是了解不深的同学,学习Java总是感觉一看就会,一些就废。往往需要一些实操练习,来夯实我们的学习结果。九九乘法表和计算器都是在编程学习领域比较经典的案例。本文为大家讲解一下两个基础练习涉及到一些基础知…

【黑夜送书第一期】好书来袭,AI时代程序员/项目经理开发之道送3本~

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

【广州华锐互动】VR高层小区安全疏散演练系统

在今天的高科技时代,虚拟现实(VR)技术已经被广泛应用到各个领域,包括教育和培训。由广州华锐互动定制开发的VR高层小区安全疏散演练系统,开始在房地产行业中崭露头角。这种系统通过模拟真实的紧急情况,帮助…

怎么使用动态代理IP提升网络安全,动态代理IP有哪些好处呢?

目录 一、什么是动态代理IP 二、动态代理IP的优势 三、动态代理IP的代码实现 1. 安装依赖库 2. 获取代理IP 3. 使用代理IP请求目标网站 4. 动态更换代理IP 五、总结 一、什么是动态代理IP 动态代理IP是指在网络通信过程中,代理服务器不是固定IP地址&#x…

Vue3 Element-UI中使用ECharts(前端数据展示开发)

前端数据展示(数据可视化、数据大屏等)可使用的工具比较多,很多第三方都提供了在线平台,比如阿里云,只需数据接口,在线配置一下界面即可使用。 阿里云的使用:利用阿里云物联网平台(I…

【解决】运行vue项目,启动报错 in ./node_modules/@intlify/core-base/dist/core-base.cjs

我的处理方式: 一开始查了好多方法,删除node_modules,重新安装,切换node版本等,但是发现并没有用 之后来发现是安装依赖包的时候有些包安装失败导致的,只要有针对性的重新安装依赖就可以了 例如: in ./n…