首页 > 编程语言 >【Python进阶】第6篇:Python的死锁和IP地址详解。总结md文档集合(已分享,附代码)

【Python进阶】第6篇:Python的死锁和IP地址详解。总结md文档集合(已分享,附代码)

时间:2023-11-27 19:00:31浏览次数:56  
标签:md Python 端口 地址 TCP 死锁 线程 端口号

本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。

全套笔记和代码自取地址: 请移步这里

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


共 14 章,157 子模块


死锁

学习目标

  • 能够知道产生死锁的原因

1. 死锁的概念

死锁: 一直等待对方释放锁的情景就是死锁

为了更好的理解死锁,来看一个现实生活的效果图:

死锁

说明:

现实社会中,男女双方一直等待对方先道歉的这种行为就好比是死锁。

死锁的结果

  • 会造成应用程序的停止响应,不能再处理其它任务了。

2. 死锁示例

需求:

根据下标在列表中取值, 保证同一时刻只能有一个线程去取值

import threading
import time

  
  
# 创建互斥锁
  
  
lock = threading.Lock()


  
  
# 根据下标去取值, 保证同一时刻只能有一个线程去取值
  
  
def get_value(index):

    # 上锁
    lock.acquire()
    print(threading.current_thread())
    my_list = [3,6,8,1]
    # 判断下标释放越界
    if index >= len(my_list):
        print("下标越界:", index)
        return
    value = my_list[index]
    print(value)
    time.sleep(0.2)
    # 释放锁
    lock.release()


if __name__ == '__main__':
    # 模拟大量线程去执行取值操作
    for i in range(30):
        sub_thread = threading.Thread(target=get_value, args=(i,))
        sub_thread.start()

3. 避免死锁

  • 在合适的地方释放锁
import threading
import time

  
  
# 创建互斥锁
  
  
lock = threading.Lock()


  
  
# 根据下标去取值, 保证同一时刻只能有一个线程去取值
  
  
def get_value(index):

    # 上锁
    lock.acquire()
    print(threading.current_thread())
    my_list = [3,6,8,1]
    if index >= len(my_list):
        print("下标越界:", index)
        # 当下标越界需要释放锁,让后面的线程还可以取值
        lock.release()
        return
    value = my_list[index]
    print(value)
    time.sleep(0.2)
    # 释放锁
    lock.release()


if __name__ == '__main__':
    # 模拟大量线程去执行取值操作
    for i in range(30):
        sub_thread = threading.Thread(target=get_value, args=(i,))
        sub_thread.start()

4. 小结

  • 使用互斥锁的时候需要注意死锁的问题,要在合适的地方注意释放锁。
  • 死锁一旦产生就会造成应用程序的停止响应,应用程序无法再继续往下执行了。

进程和线程的对比

学习目标

  • 能够知道进程和线程的关系

1. 进程和线程的对比的三个方向

  1. 关系对比
  2. 区别对比
  3. 优缺点对比

2. 关系对比

  1. 线程是依附在进程里面的,没有进程就没有线程。
  2. 一个进程默认提供一条线程,进程可以创建多个线程。

对比

2. 区别对比

  1. 进程之间不共享全局变量

  2. 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步

  3. 创建进程的资源开销要比创建线程的资源开销要大

  4. 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位

  5. 线程不能够独立执行,必须依存在进程中

  6. 多进程开发比单进程多线程开发稳定性要强

3. 优缺点对比

  • 进程优缺点:

    • 优点:可以用多核
    • 缺点:资源开销大
  • 线程优缺点:

    • 优点:资源开销小
    • 缺点:不能使用多核

4. 小结

  • 进程和线程都是完成多任务的一种方式
  • 多进程要比多线程消耗的资源多,但是多进程开发比单进程多线程开发稳定性要强,某个进程挂掉不会影响其它进程。
  • 多进程可以使用cpu的多核运行,多线程可以共享全局变量。
  • 线程不能单独执行必须依附在进程里面

IP 地址的介绍

学习目标

  • 能够说出IP 地址的作用

1. IP 地址的概念

IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。

网络中的设备效果图:

网络设备

2. IP 地址的表现形式

网络设备

说明:

  • IP 地址分为两类: IPv4IPv6

  • IPv4 是目前使用的ip地址

  • IPv6 是未来使用的ip地址

  • IPv4 是由点分十进制组成

  • IPv6 是由冒号十六进制组成

2. IP 地址的作用

IP 地址的作用是标识网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。

IP地址作用效果图:

网络设备

3. 查看 IP 地址

  • Linux 和 mac OS 使用 ifconfig 这个命令
  • Windows 使用 ipconfig 这个命令

说明:

ifconfigipconfig 都是查看网卡信息的,网卡信息中包括这个设备对应的IP地址

查看网卡信息

说明:

  • 192.168.1.107是设备在网络中的IP地址
  • 127.0.0.1表示本机地址,提示:如果和自己的电脑通信就可以使用该地址。
  • 127.0.0.1该地址对应的域名是localhost域名是 ip 地址的别名,通过域名能解析出一个对应的ip地址。

4. 检查网络是否正常

  • 检查网络是否正常使用 ping 命令

检查网络是否正常效果图

查看网卡信息

说明:

  • ping www.baidu.com 检查是否能上公网
  • ping 当前局域网的ip地址 检查是否在同一个局域网内
  • ping 127.0.0.1 检查本地网卡是否正常

3. 小结

  • IP 地址的作用是标识网络中唯一的一台设备的
  • IP 地址的表现形式分为: IPv4 和 IPv6
  • 查看网卡信息:ifconfig
  • 检查网络: ping

端口和端口号的介绍

学习目标

  • 能够说出端口和端口号的作用

1. 问题思考

不同电脑上的飞秋之间进行数据通信,它是如何保证把数据给飞秋而不是给其它软件呢?

其实,每运行一个网络程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可。

端口效果图:

端口

2. 什么是端口

端口是传输数据的通道,好比教室的门,是数据传输必经之路

那么如何准确的找到对应的端口呢?

其实,每一个端口都会有一个对应的端口号,好比每个教室的门都有一个门牌号,想要找到端口通过端口号即可。

端口号效果图:

端口

3. 什么端口号

操作系统为了统一管理这么多端口,就对端口进行了编号,这就是端口号,端口号其实就是一个数字,好比我们现实生活中的门牌号,

端口号有65536个。

那么最终飞秋之间进行数据通信的流程是这样的,通过ip地址找到对应的设备,通过端口号找到对应的端口,然后通过端口把数据传输给应用程序

最终通信流程效果图:

通信流程

4. 端口和端口号的关系

端口号可以标识唯一的一个端口。

5. 端口号的分类

  • 知名端口号
  • 动态端口号

知名端口号:

知名端口号是指众所周知的端口号,范围从0到1023。

  • 这些端口号一般固定分配给一些服务,比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务。

动态端口号:

一般程序员开发应用程序使用端口号称为动态端口号, 范围是从1024到65535。

  • 如果程序员开发的程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序使用。
  • 当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

5. 小结

  • 端口的作用就是给运行的应用程序提供传输数据的通道
  • 端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口
  • 端口号可以分为两类: 知名端口号动态端口号
    • 知名端口号的范围是0到1023
    • 动态端口号的范围是1024到65535

TCP 的介绍

学习目标

  • 能够说出TCP 的特点

1. 网络应用程序之间的通信流程

之前我们学习了 IP 地址和端口号,通过 IP 地址能够找到对应的设备,然后再通过端口号找到对应的端口,再通过端口把数据传输给应用程序,这里要注意,数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信, 而这个传输协议就是我们今天学习的 TCP。

2. TCP 的概念

TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议

面向连接的效果图:

面向连接

TCP 通信步骤:

  1. 创建连接
  2. 传输数据
  3. 关闭连接

说明:

TCP 通信模型相当于生活中的’打电话‘,在通信开始之前,一定要先建立好连接,才能发送数据,通信结束要关闭连接。

面向连接

3. TCP 的特点

  1. 面向连接

    • 通信双方必须先建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此连接,以释放系统资源。
  2. 可靠传输

    • TCP 采用发送应答机制
    • 超时重传
    • 错误校验
    • 流量控制和阻塞管理

4. 总结

TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,比如: 文件下载,浏览器上网

socket 的介绍

学习目标

  • 能够说出 socket 的作用

1. 问题思考

到目前为止我们学习了 ip 地址和端口号还有 tcp 传输协议,为了保证数据的完整性和可靠性我们使用 tcp 传输协议进行数据的传输,为了能够找到对应设备我们需要使用 ip 地址,为了区别某个端口的应用程序接收数据我们需要使用端口号,那么通信数据是如何完成传输的呢?

使用 socket 来完成

2. socket 的概念

socket (简称 套接字) 是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个 socket

插座效果图:

插座

socket 效果图:

socket

3. socket 的作用

负责进程之间的网络数据传输,好比数据的搬运工。

4. socket 使用场景

不夸张的说,只要跟网络相关的应用程序或者软件都使用到了 socket

socket使用场景

5. 小结

进程之间网络数据的传输可以通过 socket 来完成,socket 就是进程间网络数据通信的工具。

TCP 网络应用程序开发流程

学习目标

  • 能够知道TCP客户端程序的开发流程

1. TCP 网络应用程序开发流程的介绍

TCP 网络应用程序开发分为:

  • TCP 客户端程序开发
  • TCP 服务端程序开发

说明:

客户端程序是指运行在用户设备上的程序 服务端程序是指运行在服务器设备上的程序,专门为客户端提供数据服务。

2. TCP 客户端程序开发流程的介绍

TCP客户端程序开发流程

步骤说明:

  1. 创建客户端套接字对象
  2. 和服务端套接字建立连接
  3. 发送数据
  4. 接收数据
  5. 关闭客户端套接字

3. TCP 服务端程序开发流程的介绍

TCP客户端程序开发流程

步骤说明:

  1. 创建服务端端套接字对象
  2. 绑定端口号
  3. 设置监听
  4. 等待接受客户端的连接请求
  5. 接收数据
  6. 发送数据
  7. 关闭套接字

4. 小结

  1. TCP 网络应用程序开发分为客户端程序开发服务端程序开发
  2. 主动发起建立连接请求的是客户端程序
  3. 等待接受连接请求的是服务端程序

未完待续, 同学们请等待下一期

全套笔记和代码自取地址: 请移步这里

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

标签:md,Python,端口,地址,TCP,死锁,线程,端口号
From: https://blog.51cto.com/u_13578013/8587665

相关文章

  • python--条件
    Task4条件条件if语句上边是if语句执行的一个基本流程下边现在有一个简单的例子deff(x):print("A",end='')ifx==0:print("B",end='')print("C",end='')print("D")f(1) #运行结果是AD......
  • MDM介绍:1. 如何有效管理苹果设备
    由于macOS和iOS的显著优点,苹果设备越来越多的被企业、政府和教育等机构使用,那么如何有效的解决管理过程中遇到的一些问题呢?比如,如何将不同的应用安装到有需要的用户电脑,如何确保设备的使用符合制定的策略,如何防止机密信息的泄露,如何进行远程控制等等,诸如此类的问题在实际......
  • 助力企业实现更简单的数据库管理,ATOMDB 与 TDengine 完成兼容性互认
    为加速数字化转型进程,当下越来越多的企业开始进行新一轮数据架构改造升级。在此过程中,全平台数据库管理客户端提供了一个集中管理和操作数据库的工具,提高了数据库管理的效率和便利性,减少了人工操作的复杂性和错误率,让企业可以轻松地管理和维护数据库,执行各种数据库操作,并监控和优化......
  • 聪明办法学Python-2023-task04&拓展01
    参考视频链接:【条件】聪明办法学Python第二版_哔哩哔哩_bilibili​优雅代码编写指北_哔哩哔哩_bilibilitask04if语句ifstatementConditionalsMakeDecisionsif语句流程判断成立不成立一个例子:deff(x):print("A",end="")......
  • 打造有效安全闭环,天翼云MDR来了!
    随着网络攻-防对抗形势愈演愈烈,传统的安全防护模式已难以应对频率暴增、昼夜不停的网络安全攻-击,提升组织安全防护能力势在必行。事实上,一些单位在网络安全建设工作中经验不足,在安全组件/设备采购方面大量投入,部署后却缺乏专人运营。这导致在安全事件发生时,组织不能及时发现并进行......
  • 随手写了个博客多平台发布脚本:Python自动发布文章到Wordpress
    引言作为一名技术博主,提高博客发布效率是我们始终追求的目标。在这篇文章中,我将分享一个基于Python的脚本,能够实现博客多平台发布,具体来说,是自动发布文章到WordPress。通过这个简单而高效的脚本,我们能够省去繁琐的手动发布步骤,提升工作效率。技术栈在编写这个自动发布脚本的过......
  • Python之深浅拷贝
    浅copy:   1.是把列表本身独立,里面的元素是被两个列表共享的   2.当其中一个列表中的元素被改变时,另一个列表中的元素不会随之变化。   3.当列表里面还有列表时,修改内部列表的内容时,另一个列表中的内部列表也会随之变化a1=["a","b","c","aa"]b1=a1a1[0]="1"prin......
  • 聪明办法学python chap4 条件 5循环
    Python(四)条件if-elif-elsex=5ifx<0:print("x小于0")elifx==0:print("x等于0")else:print("x大于0")match-casedefcheck_value(value):matchvalue:case1:print("Valueis1&......
  • nohup ./ReverseProxy_linux_amd64 &
    IDEA安装JRebel插件实现热部署(无激活码,需要一台服务器)JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效。1.IDEA搜索并安装Jrebel插件 安装......
  • Python知识补充pip 安装包的工具
    Python知识补充pip安装包的工具(1)安装第三方模块pipinstall模块名pipinsyall模块名==#查看我当前模块都有哪些版本pipinsyall模块名==版本号#安装指定版本的模块(2)卸载模块pipuninstall模块名(3)临时换源pipuninstall模块名清华大学: https://pypi.tuna.......