Python课程-w73班
Louyj's Blog
Toggle navigation
Python课程-w73班
Home
班级课件
课堂代码
课后作业
学习资料
Archives
Tags
2022-05-22课件
2022-05-22 08:12:28
7
0
0
python-w73
#UDP编程 TCP用于建立可靠连接,并且通信双方可以以流的形式发送数据。相对于TCP,UDP面向无连接的协议。 使用UDP协议时不需要建立连接,只需要知道对方的IP地址和端口号就可以直接发送数据包。但是发送的数据包是否能到达就不 知道了。 虽然用UDP传输数据不可靠,但是优点是速度快。对于不要求可靠到达的数据可以使用UDP协议。  下面来看如何通过UDP协议传输数据。和TCP类似,使用UDP的通信双方也分为客户端和服务器。服务器首先需要绑定端口, 操作如下:  创建socket时,SOCK_DGRAM指定了socket的类型是UDP。绑定端口和TCP一样,不过不需要调用listen()方法,而是直接接 收来自任何客户端的数据,操作如下:  recvfrom()方法返回数据和客户端的地址与端口。这样,服务器收到数据后,直接调用sendto()就可以把数据用UDP发送给客户 端。 客户端使用UDP时,首先仍然是创建基于UDP的socket,然后不需要调用connect(),直接通过sendto()给服务器发送数据,操 作如下:  #多线程 ##进程与线程 什么是线程,什么是进程? 进程是程序(软件,应用)的一个执行实例,每个运行中的程序,可以同时创建多个进程,但至少要有一个。每个进程都提供执 行程序所需的所有资源,都有一个虚拟的地址空间、可执行的代码、操作系统的接口、安全的上下文(记录启动该进程的用户和 权限等等)、唯一的进程ID、环境变量、优先级类、最小和最大的工作空间(内存空间)。进程可以包含线程,并且每个进程 必须有至少一个线程。每个进程启动时都会最先产生一个线程,即主线程,然后主线程会再创建其他的子线程。 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指 令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不独 立拥有系统资源,但它可与同属一个进程的其它线程共享该进程所拥有的全部资源。每一个应用程序都至少有一个进程和一个线 程。在单个程序中同时运行多个线程完成不同的被划分成一块一块的工作,称为多线程。  举个例子,某公司要生产一种产品,于是在生产基地建设了很多厂房,每个厂房内又有多条流水生产线。所有厂房配合将整个产 品生产出来,单个厂房内的流水线负责生产所属厂房的产品部件,每个厂房都拥有自己的材料库,厂房内的生产线共享这些材 料。公司要实现生产必须拥有至少一个厂房一条生产线。换成计算机的概念,那么这家公司就是应用程序,厂房就是应用程序的 进程,生产线就是某个进程的一个线程。  ##多线程threading模块 在Python3中,通过threading模块提供线程的功能。 有两种方式来创建线程: - 一种是继承Thread类,并重写它的run()方法; - 另一种是在实例化threading.Thread对象的时候,将线程要执行的任务函数作为参数传入线程。 对于threading.Thread,它的定义如下: threading.Thread(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None) - 参数group是预留的,用于将来扩展; - 参数target是一个可调用对象,在线程启动后执行; - 参数name是线程的名字。默认值为“Thread-N“,N是一个数字。 - 参数args和kwargs分别表示调用target时的参数列表和关键字参数。 例如使用threading.Thread创建一个线程: ``` import threading import time def fun01(a): while True: time.sleep(1) print("hello1") def fun02(): while True: time.sleep(1) print("hello2") t = threading.Thread(target=fun01, args=(1,),daemon=True) # 线程, 去执行fun01 t.start() # 线程启动起来 t2 = threading.Thread(target=fun02, daemon=True) # 线程, 去执行fun01 t2.start() # 线程启动起来 print("111111") time.sleep(5) print("222222") ```
Pre:
2022-05-22课堂代码
Next:
2022-05-15课堂代码
0
likes
7
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.