Python-file -note

本文详细对比了Python2与Python3的主要差异,包括字符串编码、输入输出函数变化,以及列表和字符串操作的不同。同时,深入介绍了网络编程的基础知识,如TCP/IP协议、三次握手和四次挥手过程,以及网络基础概念如MAC地址、IP地址和子网掩码。此外,还探讨了多线程与多进程的区别,以及Python的全局解释器锁(GLL锁)的影响。
python 2和3的区别

1.解释型和编译型
1.编译型:
1.先把代码编译成机器码-->计算机寄存器去运行 C
2.先把代码编译场XXX--->计算机去找虚拟机执行代码-->机器码交给计算机去运行 C JAVA C#
2.解释型:
边解释边执行 python


1.列表-->字符串
join([])
2.字符串-->列表
list() split()
3.代码字符串反切
v[::-1]
4.python递归最大层数
1k
5.python2和python3的区别
编码\字符串:
字符串:
py2: unicode v = u"root" 万国码(unicode)存储 (str\bytes) v = "root"字节存储
py3: str v = "root" 万国码存储 bytes v =b"root" 字节存储
编码:
py2:ascii 文件头可以修改: encoding utf-8
py3:utf-8 文件头可以修改 encoding utf -8
文件如何存储:
继承
py2:经典类\新式类 py3新式类 c3算法

范围:
py2 : range()\xrange()
py3 : range()

输入:
py2 v1 = raw_input('请输入')
py3 v2 = input('请输入')

打印
py2:print'xxx' py3:print(xxx)


  函数的作用域:
    python的作用域是通过函数划分的 python的作用域在写完代码就已经生成 和JavaScript一样
  列表生成式 v = [lambda x:x+i for i in range(10)]
网络知识:
网络编程
socket客户端和服务端
黏包struct解决
高并发 socketserver 线程进程
断点续传
网络基础
mac地址 : 网卡 网路接口驱动
路由器 :
交换机
DHCP :分配ip地址 子网掩码
IP :
子网掩码 :255.255.255.255用来做广播的 255.255.255.0网络地址
网关 :255.255.255.1 就是网关
域名 :访问别人跟ip对应关系 域名解析DNS解析 本地houst文件
解析内网ip:arp协议+广播 +单播(广播风暴)
外网的ip 网关
socket
1.tcp用的最多 数据必须完整
2.udp对于数据的完整性安,全性要求不高的 视频聊天
3.socketserver 多线程
4.黏包问题
网络基础端口
端口是什么 为什么有
端口是为了将同一个电脑上的不同程序进行隔离
ip是找电脑
端口是找电脑上的程序
MySQL是一个软件 帮助我们在硬盘上进行文件操作 默认端口3306
Redis是一个软件,帮助我们在内存上进行数据操作 默认端口6379
网站默认的端口80 访问时 http://www.baidu.com80
网站默认端口443 访问时 http://www.baidu.com443
范围
1-65535
1-1024
一般情况
8000


#############################################################################################
OSI7层模型
7层:
自己写的代码: 自己代码 + 框架
应用层 使用软件 打开网站或这应用软件
表示层 看到数据 如图片和视频 生产数据 szwwd
会话层 保持登录或者链接状态 应用偷偷携带一点其他数据:令牌 19rRNAwf8GVe6xyT9kJPIu5SlQc
socket模块:
传输层 TCP\UDP协议 [tcp] [szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]
网络层 IP [ip] [ [tcp][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc] ]
数据链路层 MAC [MAC] [[ip] [ [tcp][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc] ]]
物理层 将数据转换成电信号发送



5层:
应用层 打开网站或这应用软件
应用层 表示层 生产数据
会话层 应用偷偷携带一点其他数据:令牌
传输层 TCP\UDP协议
网络层
数据链路层
物理层
4层:
应用层
应用层 表示层
会话层
传输层
网络层

物理层 数据链路层
物理层

TCP:
socket客户端向服务器发送连接请求时:通过三次握手进行连接 连接发送3次请求
socket.connect((.....))
客户端: 我能打你吗
服务端: 来呀来呀
客户端: 好的我这就来
client.send('发送数据')
客户端和服务端断开连接时: 通过4次挥手 断开发送4次请求 也可能3次
client.close() 或 conn.close()
------------------------------
客户端: 我要断开连接
服务端: 断开就断开等我处理一些手头的事情
服务端: 我处理完了 断开吧
客户端: 拜拜

补充:断开连接时,反应到代码上:要么抛出异常\发送空内容.


总结:
1.网络基础
1.OIS 7层
2.三次握手四次握手
3.其他网络知识
1.mac
2.IP
3.子网掩码
4.HDCP服务(路由器)
5.路由器
6.交换机
7.广播\单播
8.arp协议
9.DNS
10.私有云\公有云
11.服务器\域名
2.socke
1.服务端:
1.监听IP和端口
2.等待客户端连接
收(阻塞)
发()
2.客户端:
连接服务端IP和端口(阻塞)
收(阻塞)


3.socketserver

#############################################################################
GLL锁是什么
对数据进行控制,决定释放一个还是多个
进程和线程的区别
进程是cpu资源分配的最小单元
线程是cpu计算的最小单元
一个进程可以有多个线程 有一个默认的主线程
对于python来说他的进程和线程和其他语言有差异.GLL锁保证同一个进程中
只有一个线程被cpu调用

IO密集型操作可以使用多线程,计算密集型可以使用多进程
Lock和RLock的区别

线程池只有py3有 py2没有

python的GLL锁
什么是GLL锁 python内置的一个叫全局解释器锁,
锁的作用就是保证同一个时刻只有一个线程可以被cpu调用
为什么有GLL锁 语言的创始人在开发这门语言时 目的是快速把语言开发出来
简单快速的开发出来 如果加上GLL锁切换时 (c语言加锁)
按照100条字节的指令来进行线程间的切换

进程和线程的区别
线程:是cpu工作的最小单元
进程 :位线程提供一个资源共享的空间
进程下边至少有一个线程
一个进程中默认是有一个主线程的

应用程序
可以有多个进程 参照任务管理器的进程
队 列先进先出
栈 后进后出

IO多路复用的作用
检测多个socket是否发生变化
操作系统socket是否发生变化,有三种模式
slect 1024个socket: 循环去检测
poll 不限制监听socket个数 循环去检测水平触发
epoll 不限制监听socket个数:回调方式边缘触发
python模块
select.select
select.epool


什么是异步阻塞
1.非阻塞 不等待 比如创建socket对某个辞职进行connect 获取接收数据recv时默认都会等待
(连接成功或接收到数据),才执行后续操作,如果设置setblocking(False)以上两个过程就不在等待
但是会报BlockingIOError的错误只要捕获即可
2.异步:执行完成之后自动执行回调函数或自动执行某些操作
比如做爬虫中向摸个地址发送请求 当请求执行完成之后自动执行回调函数

什么是同步阻塞
1.阻塞就是等同步就是顺序一个一个执行

协成
进程操作系统存在
线程操作系统中存在
协成 是有程序员创造出来的一个不真实的东西
模块greenlet

什么是协成
协成可以称为微线程,就是开发者控制线程执行的流程,控制先执行某
代码然后在切换到另外函数执行代码 来回切换
协成可以提高并发吗
协成本身无法实现并发甚至性能会降低
协成+IO切换性能的提高
进程线程协成的区别
  线程:是cpu工作的最小单元
进程 :位线程提供一个资源共享的空间
进程下边至少有一个线程
一个进程中默认是有一个主线程的
  进程操作系统存在
线程操作系统中存在
协成 是有程序员创造出来的一个不真实的东西
模块greenlet
单线程提高并发
协成+IO切换 :gevent
基于事件虚幻的异步非阻塞框架Twisted


IO多路复用
可以监听所有的IO请求的状态
-socket
I input 输入
O output 输出
三种模式
select
poll
epoll
面向对象 封装  继承 多态



转载于:https://www.cnblogs.com/The-Meaning-of-Life111/p/11093092.html

<think>好的,我现在需要帮助用户解决在安装python-geohash时遇到的构建错误。用户提供的错误信息显示,在尝试构建wheel时,gcc命令失败,提示“No such file or directory”。首先,我得分析可能的原因。 首先,错误信息中明确提到gcc命令找不到。这表明系统可能没有安装gcc编译器,或者Python开发所需的头文件和库文件缺失。因为python-geohash是一个包含C++扩展(src/geohash.cpp)的包,构建时需要编译这些代码,所以缺少构建工具会导致失败。 接下来,我需要考虑常见的解决方法。通常,这类问题在Linux系统上出现较多,因为默认情况下可能没有安装所有开发工具。用户可能缺少gcc、Python开发文件,或者相关的构建依赖。因此,第一步应该是检查并安装这些依赖。 可能的步骤包括: 1. 安装gcc编译器和构建工具。在基于Debian的系统上,这可能是通过安装build-essential包;在Red Hat系则是通过安装gcc和make等。 2. 安装Python的开发文件,通常包名为python3-dev或类似的。 3. 确保安装了setuptools和wheel,因为它们是构建Python包的基础。 4. 如果问题依旧,可能需要检查是否存在其他依赖,比如geohash库可能需要特定的库或头文件。 5. 最后,考虑使用预编译的二进制包,比如通过pip的二进制分发或使用conda安装,避免从源码编译。 另外,用户使用的Python版本是3.11,这可能影响到某些包的兼容性,但根据错误信息,问题更可能出在系统依赖而不是Python版本上。不过,也需要确认python-geohash是否支持Python 3.11,可能需要查看包的官方文档或问题追踪系统。 用户可能不太清楚系统包管理器和pip之间的关系,需要解释清楚为什么需要安装这些系统级别的依赖。同时,可能需要指导用户如何根据他们的操作系统安装相应的软件包,比如区分Ubuntu和CentOS的命令。 还有,错误提示中提到“subprocess-exited-with-error”,通常这意味着子进程(这里是gcc)执行失败,进一步确认问题出在编译环境缺失。最后,如果所有方法都失败,可能需要建议用户寻找替代的纯Python实现的geohash库,避免编译C++扩展的问题。 总结起来,解决方案的步骤应该是: - 安装gcc和构建工具 - 安装Python开发文件 - 更新pip和setuptools - 重试安装 - 如果失败,尝试使用conda或寻找替代库</think>遇到在构建 `python-geohash` 时出现的错误,通常是因为系统缺少编译C/C++扩展所需的依赖。以下是分步解决方案: --- ### **错误原因分析** 1. **缺少编译器**:错误信息 `error: command 'gcc' failed: No such file or directory` 表明系统未安装 `gcc` 编译器。 2. **缺少Python开发头文件**:编译Python扩展需要Python的头文件(如 `Python.h`)。 3. **缺少构建工具**:某些系统可能缺少 `setuptools` 或 `wheel` 的更新版本。 --- ### **解决方法** #### **步骤1:安装编译工具链** 根据你的操作系统,安装 `gcc` 和基础构建工具: - **Debian/Ubuntu**: ```bash sudo apt update sudo apt install gcc python3-dev build-essential ``` - **RHEL/CentOS**: ```bash sudo yum groupinstall "Development Tools" sudo yum install python3-devel ``` - **Fedora**: ```bash sudo dnf install gcc python3-devel ``` --- #### **步骤2:更新Python构建工具** 确保 `pip`, `setuptools`, 和 `wheel` 是最新版: ```bash pip install --upgrade pip setuptools wheel ``` --- #### **步骤3:重试安装** 重新安装 `python-geohash`: ```bash pip install python-geohash ``` --- #### **步骤4:如果仍失败** 如果问题依旧,尝试以下备选方案: 1. **使用预编译二进制**: 某些平台可通过 `conda` 安装预编译包: ```bash conda install -c conda-forge python-geohash ``` 2. **使用替代库**: 改用纯Python实现的库(无需编译): ```bash pip install geohash2 # 或 geopy ``` --- ### **总结** - **核心问题**:缺少C编译器或Python开发文件。 - **推荐方案**:安装系统依赖后重试,或改用预编译包/替代库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值