Python中Threading对于TCP的使用

什么是多线程?

多线程类似于同时执行多个不同程序,多线程运行有如下优点:

使用线程可以把占据长时间的程序中的任务放到后台去处理。
用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
程序的运行速度可能加快
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
线程在执行过程中与进程还是有区别的。每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。

指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。

线程可以被抢占(中断)。
在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) – 这就是线程的退让。

Threading多线程介绍

在Python中,Threading是一个内置的模块来实现多线程编程。threading模块提供了创建、控制和管理线程的功能

对于TCP的多线程使用

import threading
import socket# Tcp服务端
def Server():# 定义服务器地址和端口HOST = 'localhost'  # 使用本地主机PORT = 8888# 创建一个套接字对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 将套接字绑定到指定地址和端口server_socket.bind((HOST, PORT))# 监听连接server_socket.listen(1)print('等待客户端连接...')# 接受客户端连接client_socket, addr = server_socket.accept()print('客户端已连接:', addr)# 接收客户端发送的数据data = client_socket.recv(1024).decode()print('收到的数据:', data)# 处理数据response = 'Hello, client!'# 发送响应给客户端client_socket.sendall(response.encode())# 关闭连接client_socket.close()# Tcp 客户端
def Client():# 定义服务器地址和端口HOST = 'localhost'  # 使用本地主机PORT = 8888# 创建一个套接字对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器client_socket.connect((HOST, PORT))print('已连接到服务器')# 发送数据message = 'Hello, server!'client_socket.sendall(message.encode())print('发送的数据:', message)# 接收响应response = client_socket.recv(1024).decode()print('收到的响应:', response)# 关闭连接client_socket.close()def main():# 创建线程server = threading.Thread(target=Server)client = threading.Thread(target=Client)# 启动线程server.start()client.start()if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot经典面试题2

问题:什么是Spring Boot的起步依赖(Starter Dependencies)?如何使用起步依赖? 答案:Spring Boot的起步依赖是一组预定义的依赖项,可以简化项目的配置和构建过程。可以通过在项目的构建配置文件…

[个人笔记] WinSrv批量添加DNS记录和条件转发器记录

Windows Server - 运维篇 第三章 WinSrv批量添加DNS记录和条件转发器记录 Windows Server - 运维篇系列文章回顾WinSrv批量添加DNS记录和条件转发器记录单条记录添加DNS条件转发器记录批量新增DNS条件转发器记录批量导出DNS条件转发器 参考来源 系列文章回顾 第一章 域控使用C…

使用 jmeter 进行审批类接口并发测试

目录 前言: 背景: 难点: 场景 a: 场景 b: 前言: 使用JMeter进行审批类接口的并发测试是一种有效的方法,可以模拟多个用户同时对接口进行审批操作,以评估系统在高负载情况下的性…

Java+Vue+Uniapp全端WMS仓库管理系统

详情图片为运行截图,功能列表: 1、数据管理:物料数据管理、物料Bom管理、物料组管理、物料分类管理、供应商管理、仓库管理、货位管理、车间管理 2、采购管理:物料标签管理、入库单管理、入库退货管理 3、质检管理:质检单管理(包括单据号、单据类型、创建时间、检验状态…

4. CSS用户界面样式

4.1什么是界面样式 所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。 ●更改用户的鼠标样式 ●表单轮廓 ●防止表单域拖拽 4.2鼠标样式cursor li {cursor: pointer; }设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。 4.3轮廓线outline…

Mac如何将homebrew添加到系统路径

1.在终端下进入路径配置文件 sudo vim .zprofile 2.输入用户密码进入文本,键盘按i进入编辑模式(左下角会显示INSERT状态),配置环境变量: export PATH/opt/homebrew/bin:$PATH3.Esc退出编辑模式,输入**&am…

排序算法第三辑——交换排序

目录 ​编辑 一,交换排序算法的简介 二,冒泡排序 冒泡排序代码:排升序 三,快速排序 1.霍尔大佬写的快速排序 2.挖坑法 3.前后指针法 四,以上代码的缺陷与改正方法 三数取中 三路划分: 五&#…

【电子学会】2023年05月图形化四级 -- 计算圆的面积和周长

计算圆的面积和周长 编写程序计算圆的面积和周长。输入圆的半径,程序计算出圆的面积和周长,圆的面积等于3.14*半径*半径;圆的周长等于2*3.14*半径。 1. 准备工作 (1)保留舞台中的小猫角色和白色背景; 2…

Stream流式思想

什么是Stream? 也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数组的数据。 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操…

从 Blender 导出动画视频

Blender Tutorial - How To Export Video Files 要导出编辑完的视频,你需要先设置好输出的格式、分辨率、帧率、位置等参数,然后选择渲染动画的选项,等待渲染完成后,你就可以在指定的位置找到生成的视频文件。 具体步骤如下&…

Python 列表 sort()函数使用详解

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 sort函数使用详解 1、升序降序2、sort()和sorted()的区别3、切片排序4、指定排序…

vue封装短信验证码,刷新缓存倒计时

HTML代码 <a-form-item field"verifyCode" label"验证码:"><a-input v-model"formData.verifyCode" placeholder"短信验证码" class"login-form-button" allow-clear><template #append><span:class&q…

TypeScript笔记

文章目录 什么是TS前期准备安装TSTS配置文件 基础类型原始类型 object类型 数组类型 元组类型 枚举 函数类型可选参数和默认参数剩余参数 any任意类型 高级类型交叉类型联合类型 接口类泛型类型别名参考 什么是TS 官网介绍&#xff1a;TypeScript是JavaScript类型的超集&#…

力扣160. 相交链表

题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。题目数据保证整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#xff0c;链表必须保持其原始结构。 链接&am…

深度学习项目四:创建自定义数据集的dataset, DataLoader

深度学习项目四:创建自定义数据集的dataset, DataLoader 文章目录 深度学习项目四:创建自定义数据集的dataset, DataLoader前言一、构建dataset基本类二、创建train_dataset,test_dataset及相应DataLoader1.数据集的index创建2.创建自定义dataset类3.划分训练集和测试集,创建…

Qt应用程序性能优化总结

在Qt中进行性能优化时&#xff0c;可以考虑以下建议来提高应用程序的性能&#xff1a; 1. 使用合适的数据结构&#xff1a;选择适当的数据结构对于提高性能至关重要。例如&#xff0c;使用QList而不是QVector来存储大量数据时&#xff0c;可以提高插入和删除的性能。另外&…

飞书ChatGPT机器人 – 打造智能问答助手实现无障碍交流

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

Flask结合gunicorn和nginx反向代理的生产环境部署及踩坑记录

个人博客&#xff1a;https://xzajyjs.cn 前言 之前自己写的flask使用gunicorn上线生产环境没有什么问题&#xff0c;但是最近搭建了一个现成的flask项目&#xff0c;当使用python直接运行时不会有问题&#xff0c;而使用gunicorn时则会出现一些问题。 部署过程 运行测试 这…

听GPT 讲K8s源代码--pkg(一)

在 Kubernetes 代码仓库中&#xff0c;pkg/api和pkg/apis目录都包含用于定义 Kubernetes API 对象的代码&#xff0c;但它们的作用略有不同。 pkg/api目录包含 Kubernetes 的旧版本 API 对象定义&#xff0c;这些定义在 Kubernetes 1.7 版本之前使用。这些对象定义已经过时&…

k8s 持久化存储

我们继续来查看 k8s 的卷&#xff0c;上一次我们分享了将磁盘挂载到容器中&#xff0c;empyDir 和 gitRepo 都是会随着 pod 的启动而创建&#xff0c;随着 pod 的删除而销毁 那么我们或许会有这样的需求&#xff0c;期望在 pod 上面读取节点的文件或者使用节点的文件系统来访问…