1.网络编程
-
socket(套接字)
1)什么是socket
socket又叫套接字,指的是网络通信的两端,分别是服务器和客户端,socket编程就是通过代码实现客户端和服务器之间的通信
2)服务器的实现
-
创建套接字的对象
server = socket.socket(family,type)
family:ip类型,AF_INET>ipv4
type:传输协议的类型,SOCK_STREAM>TCP,
SOCK_DGRAM>UDP,
-
绑定IP地址和端口
IP用来区分互联网上设备
端口是用来区分一台计算机上不同的服务(应用),值是0-65535,其中0-1024是著名端口。
server.bind((ip地址,端口号))
-
启动服务器(监听请求)
server.listen(数量)这里的数量指的是一次性能够处理的最大请求数
-
让服务器一直处于运行状态
while 1:
print(‘开始监听’)
-
等待客户端的请求
等待客户端的请求
程序执行到这个地方会停下来,等到有客户端来连接服务器,才会接着往后执行(进程阻塞)
connect,addr=server.accept()
print(connect,addr)等待客户端的请求
程序执行到这个地方会停下来,等到有客户端来连接服务器,才会接着往后执行()
-
发送消息
send(数据)
message = input(‘>>>’)
connect.send(message.encode(encoding = 'utf-8'))
-
接受消息
recv(字节数) -接受数据,并且制定一次性接受的数据的最大值;返回接受到的二进制数据。
data = connect.recv(1024) -程序运行到这里会停下来,直到客户端给服务器发送消息,才会执行
print(data.decode(encoding = 'utf-8'))
-
关闭连接
connect。close()
3)客户端的实现
-
创建客户端对象
client = socket.socket()
-
连接服务器
client .connect('10.7.190.138',8080)
-
接收消息
data = client.recv(1024)
print('<<<:')
print(data.decode(encoding = 'utf-8'))
-
发送消息
message = input('>>>:')
client .send(message.encode(encoding= 'utf-8'))
-
关闭客户端
client.close()
-
-
网络请求(request):根据网络接口请求数据
1)获取字符串形式的数据结果
text = response.text
print(type(text),text)2)获取二进制数据
data = response.content
print(type(data),data)3)获取json数据
message = response.json()
print(type(message),message)
2.多线程
进程:一个正在运行的应用程序,每个进程之间是相互独立的。每个进程默认都有一个线程(主线程)
-
线程:进程执行任务的基本单元(最小基本单元)
1个线程中任务的执行是串行的
-
进程和线程的区别:
1)线程是CPU调用(执行任务)的最小单位
2)进程是CPU分配资源和调度的单位
3)一个程序可以有多个进程,一个进程至少有一个线程。
4)同一个进程内的线程共享进程的资源
-
多线程:一个进程可以开启多条线程,每条线程可以并行(同时)执行不同的任务
进程>车间,线程>车间工人
多线程执行可以提高程序的执行效率
-
多线程的原理
同一时间,CPU只能处理一条线程,只有一条线程在执行
多线程并发执行,其实是CPU快速地在多条线程之间调度。
-
python中如何使用多线程:
通过内置threading模块来提供多线程相关技术,其中有一个Thread类,这个类的对象就是线程对象
1)直接创建线程类的对象
a.语法:xiancheng duixiang = Thread(target=函数,args=参数)创建一个线程对象,并返回
b.说明,function类型的变量,这个函数的函数体就会在线程执行
参数:元祖;参数会传给target对应的函数,
2)让线程开始执行任务
线程对象.start() 开始执行子线程的任务
3)创建线程子类
声明一个类继承自Thread
重写run方法,这个方法中的任务就是需要在子线程中执行的任务
创建当前类的对象(线程对象)
-
join
线程对象.join() -功能:程序执行到此处,会停下来(当前线程会阻塞)等线程执行完毕再执行下面语句