1.socket
Python用socket模块可以实现简单的网络通信
1.1创建客户端
import socket
def client_socket():
# 定义客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置服务端和ip
client.connect(('localhost', 8888))
# 设置发送到服务端数据
msg = '我是客户端'
client.send(msg.encode(encoding='utf-8'))
# 接收服务端数据
recv_data = client.recv(1024)
print('收到服务端数据:', recv_data.decode(), '\n')
client.close()
if __name__ == '__main__':
# 运行客户端
client_socket()
1.2创建服务端:
import socket
def server_socket():
# 创建服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定客户端ip和端口
server.bind(('localhost', 8888))
# 设置监听大小
server.listen(10)
print('服务器开始监听')
# 阻塞至客户端 取得消息
conn, ip_port = server.accept()
# 设置消息大小
recv_data = conn.recv(1024)
print(f'收到客户端{ip_port}', recv_data.decode(), '\n')
# 发送到客户端消息
msg = '我是服务端'
conn.send(msg.encode())
# 关闭资源
conn.close()
if __name__ == '__main__':
# 运行服务端
server_socket()
1.3运行测试: 首先运行服务端:
再运行客户端,接收到已经运行的服务端数据:
最后查看服务端数据:
2.multiprocessing
Python可以用multiprocessing实现多进程
import multiprocessing
import time
def process_1():
for i in range(5):
print(f'进程1运行:{i}次;')
time.sleep(0.1) # 模拟进程运行时间
def process_2(name):
for i in range(5):
print(f'{name}进程2运行:{i}次;')
time.sleep(0.1) # 模拟进程运行时间
def process_3():
for i in range(5):
print(f'进程3运行:{i}次;')
time.sleep(0.1) # 模拟进程运行时间
if __name__ == '__main__':
# 开启守护进程
p1 = multiprocessing.Process(target=process_1, daemon=True)
# 传参
p2 = multiprocessing.Process(target=process_2, args=('小明',))
# 不开启守护进程
p3 = multiprocessing.Process(target=process_3)
p1.start()
p2.start()
p3.start()
time.sleep(0.3)
print('主进程结束!进程1一起结束。')
注意: 1.target=函数名,而不是target=函数名(); 2.在子进程创建进程可能会导致无限创建进程,要在main进程中创建进程。 测试结果:
3.threading
Python可以用threading实现多线程
import threading
import time
def thread_1():
for i in range(5):
print(f'线程1运行:{i}次;')
time.sleep(0.1) # 模拟线程运行时间
def thread_2(name):
for i in range(5):
print(f'{name}线程2运行:{i}次;')
time.sleep(0.1) # 模拟线程运行时间
def thread_3():
for i in range(5):
print(f'线程3运行:{i}次;')
time.sleep(0.1) # 模拟线程运行时间
if __name__ == '__main__':
# 开启守护线程
p1 = threading.Thread(target=thread_1, daemon=True)
# 传参
p2 = threading.Thread(target=thread_2, args=('小明',))
# 不开启守护线程
p3 = threading.Thread(target=thread_3)
p1.start()
p2.start()
p3.start()
time.sleep(0.3)
print('主线程结束!线程1一起结束。')
测试结果:
进程和线程的区别:
进程:
- 进程占用内存相对多
- 进程里默认有一个线程
- 进程间数据不共享
- 进程可以使用多个cpu运行
线程:
- 线程占用资源相对少
- 一个线程必须依赖一个进程运行
- 线程间的全局变量共享
- 线程只能用一个cpu来回切换运行