Python socket、multiprocessing和threading模块的使用

桥蕤
• 阅读 473

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运行测试: 首先运行服务端: Python socket、multiprocessing和threading模块的使用

再运行客户端,接收到已经运行的服务端数据: Python socket、multiprocessing和threading模块的使用

最后查看服务端数据: Python socket、multiprocessing和threading模块的使用

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进程中创建进程。 测试结果: Python socket、multiprocessing和threading模块的使用

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一起结束。')

测试结果: Python socket、multiprocessing和threading模块的使用

进程和线程的区别:

进程:

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

线程:

  1. 线程占用资源相对少
  2. 一个线程必须依赖一个进程运行
  3. 线程间的全局变量共享
  4. 线程只能用一个cpu来回切换运行
点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
2年前
一文带你了解Python Socket 编程
大家好,我是皮皮。前言Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。端口号的范围为065535(用户端口号一般大于1024),协议有很多种,一般我们经常用到的就是TCP,IP,UDP。下面我们来详细了解下Socket吧。一、导入Socket模块因为要操作套接字,
Wesley13 Wesley13
3年前
java学习 网络编程 tcp
有客户端和服务端,使用tcp传输day26 27//客户端发数据到服务端/\\Tcp传输,客户端建立的过程。\1,创建tcp客户端socket服务。使用的是Socket对象。\建议该对象一创建就明确目的地。要连接的主机。\2,如果连接建立成功,说明数据传输通道已建立。\该通道就是socket流
Stella981 Stella981
3年前
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
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
Android Socket 通信
Androidsocket通信安卓编写Socket客户端,实现连接Socket服务端通信。创建Socket连接并获取服务端数据先创建几个全局变量吧privateBufferedWriterwriternull;Socketsocket;
Stella981 Stella981
3年前
Python socket网络模块
一、基于TCP协议的socket通信以打电话为理解方式进行TCP的通信。Server端代码:importsocketphonesocket.socket(socket.AF_INET,socket.SOCK_STREAM)购买电话卡,AF_INET服务器之间网络
Stella981 Stella981
3年前
Python操作MongoDB代码示例
1importpymongopipinstallpymongo安装python操作mongodb的模块2myclientpymongo.MongoClient(host'127.0.0.1',port27017)指定主机和端口号创建客户端34dblistmyclient
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
3年前
Netty 应用:Socket服务器
Socket服务器Netty作为Socket服务器,需要编写服务端和客户端,服务器端和客户端收发消息通过自定义的Handler.channelRead0方法来交互,客户端连接上服务器后,需要在active时向服务器发送一条消息来触发服务器的行为。服务端实现/Createdbyfubinon2019/7/
Wesley13 Wesley13
3年前
Java Socket基本例子——使用最原始方法
使用最原始的java.net.ServerSocket和java.net.Socket进行socket通信。实现的效果为:客户端向服务端发送消息、服务端向客户端发送消息、保留统计客户端的信息列表、剔除已经断开的客户端等。本文所有代码均可在https://gitee.com/songxinqiang/JavaSocketDemo(https://git
桥蕤
桥蕤
Lv1
夕阳无限好,只是近黄昏。
文章
7
粉丝
0
获赞
0