Python socket、multiprocessing和threading模块的使用

1.socket

Python用socket模块可以实现简单的网络通信

1.1创建客户端

1import socket 2 3 4def client_socket(): 5 # 定义客户端 6 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 # 设置服务端和ip 8 client.connect(('localhost', 8888)) 9 # 设置发送到服务端数据 10 msg = '我是客户端' 11 client.send(msg.encode(encoding='utf-8')) 12 # 接收服务端数据 13 recv_data = client.recv(1024) 14 print('收到服务端数据:', recv_data.decode(), '\n') 15 16 client.close() 17 18 19if __name__ == '__main__': 20 # 运行客户端 21 client_socket()

1.2创建服务端:

1import socket 2 3 4def server_socket(): 5 # 创建服务端 6 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 # 绑定客户端ip和端口 8 server.bind(('localhost', 8888)) 9 # 设置监听大小 10 server.listen(10) 11 print('服务器开始监听') 12 # 阻塞至客户端 取得消息 13 conn, ip_port = server.accept() 14 # 设置消息大小 15 recv_data = conn.recv(1024) 16 print(f'收到客户端{ip_port}', recv_data.decode(), '\n') 17 # 发送到客户端消息 18 msg = '我是服务端' 19 conn.send(msg.encode()) 20 # 关闭资源 21 conn.close() 22 23 24if __name__ == '__main__': 25 # 运行服务端 26 server_socket() 27

1.3运行测试: 首先运行服务端: image

再运行客户端,接收到已经运行的服务端数据: image

最后查看服务端数据: image

2.multiprocessing

Python可以用multiprocessing实现多进程

1import multiprocessing 2import time 3 4 5def process_1(): 6 for i in range(5): 7 print(f'进程1运行:{i}次;') 8 time.sleep(0.1) # 模拟进程运行时间 9 10 11def process_2(name): 12 for i in range(5): 13 print(f'{name}进程2运行:{i}次;') 14 time.sleep(0.1) # 模拟进程运行时间 15 16 17def process_3(): 18 for i in range(5): 19 print(f'进程3运行:{i}次;') 20 time.sleep(0.1) # 模拟进程运行时间 21 22 23if __name__ == '__main__': 24 # 开启守护进程 25 p1 = multiprocessing.Process(target=process_1, daemon=True) 26 # 传参 27 p2 = multiprocessing.Process(target=process_2, args=('小明',)) 28 # 不开启守护进程 29 p3 = multiprocessing.Process(target=process_3) 30 31 p1.start() 32 p2.start() 33 p3.start() 34 35 time.sleep(0.3) 36 print('主进程结束!进程1一起结束。') 37

注意: 1.target=函数名,而不是target=函数名(); 2.在子进程创建进程可能会导致无限创建进程,要在main进程中创建进程。 测试结果: image

3.threading

Python可以用threading实现多线程

1import threading 2import time 3 4 5def thread_1(): 6 for i in range(5): 7 print(f'线程1运行:{i}次;') 8 time.sleep(0.1) # 模拟线程运行时间 9 10 11def thread_2(name): 12 for i in range(5): 13 print(f'{name}线程2运行:{i}次;') 14 time.sleep(0.1) # 模拟线程运行时间 15 16 17def thread_3(): 18 for i in range(5): 19 print(f'线程3运行:{i}次;') 20 time.sleep(0.1) # 模拟线程运行时间 21 22 23if __name__ == '__main__': 24 # 开启守护线程 25 p1 = threading.Thread(target=thread_1, daemon=True) 26 # 传参 27 p2 = threading.Thread(target=thread_2, args=('小明',)) 28 # 不开启守护线程 29 p3 = threading.Thread(target=thread_3) 30 31 p1.start() 32 p2.start() 33 p3.start() 34 35 time.sleep(0.3) 36 print('主线程结束!线程1一起结束。')

测试结果: image

进程和线程的区别:

进程:

  1. 进程占用内存相对多
  2. 进程里默认有一个线程
  3. 进程间数据不共享
  4. 进程可以使用多个cpu运行

线程:

  1. 线程占用资源相对少
  2. 一个线程必须依赖一个进程运行
  3. 线程间的全局变量共享
  4. 线程只能用一个cpu来回切换运行
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

一文带你了解Python Socket 编程

大家好,我是皮皮。前言Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。端口号的范围为065535(用户端口号一般大于1024),协议有很多种,一般我们经常用到的就是TCP,IP,UDP。下面我们来详细了解下Socket吧。一、导入Socket模块因为要操作套接字,

java学习 网络编程 tcp

有客户端和服务端,使用tcp传输day26 27//客户端发数据到服务端/\\Tcp传输,客户端建立的过程。\1,创建tcp客户端socket服务。使用的是Socket对象。\建议该对象一创建就明确目的地。要连接的主机。\2,如果连接建立成功,说明数据传输通道已建立。\该通道就是socket流

Python之socket编程进阶版

1.socket之简单的ssh功能2.socket之简单的ftp服务器3.socketserver的用法4.socketserver的多并发的实现1.socket实现ssh服务 1.1我们现在Windows环境下试一下ssh的功能!(https://oscimg.oschina.net/oscnet/c77879672f0

Scapy 从入门到放弃

0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os

Android Socket 通信

Androidsocket通信安卓编写Socket客户端,实现连接Socket服务端通信。创建Socket连接并获取服务端数据先创建几个全局变量吧privateBufferedWriterwriternull;Socketsocket;