276浏览
0点赞

9.2、Socket是什么

通过前面的介绍,是不是觉得 TCP/IP 很复杂,我们其实不必去完全了解这些协议的内部细节,因为对于多数用户来说,所关心的是如何使用这些协议来传输数据。本节将介绍一套历史悠久的接口——socket。使用 socket 我们就不用直接和这些协议打交道了,也不用了解这些协议的
354浏览
0点赞

9.3、TCP echo服务器的建立(Python实现)

本节我们将编写一个简单的 echo 服务器。该服务器等待用户的连接,连接成功后,它将接收到的用户的任何输入都原封不动地回送给客户端,直到用户关闭了连接,此时服务器自动退出。这个例子使用了 TCP 协议,使用的协议是在创建 socket 时指定的,方法如下:s = socket.so
301浏览
0点赞

9.4、编写简单的TCP客户端

在《TCP echo服务器的建立》一节的基础上,我们还需要一个客户端,这样才能实现数据交互。本节将编写一个这样的客户端,它和前面介绍的服务器建立连接,并发送一串简单的数据,然后读取服务器的返回数据。首先需要创建一个 socket 对象。和服务器端一样,也是指定使用 T
330浏览
0点赞

9.5、UDP echo服务器的建立(Python实现)

《TCP echo服务器的建立》和《编写简单的TCP客户端》分别介绍了使用 TCP 协议编写 echo 服务的服务器端代码和客户端代码。本节将实现一个 UDP 版的 echo 服务。虽然 TCP 和 UDP 区别很大,但是从 socket 接口来说它们并没有太大的区别,只是在 socket 创建时需要指定 so
319浏览
1点赞

8.1、什么是多线程,Python多线程编程

早在 20 世纪 60 年代,进程的概念就出现了。但进程是资源的拥有者,进程的创建、销毁、调度代价都比较高,所以出现了对轻量级进程的需求。到了 20 世纪 80 年代,出现了线程,类似于进程,线程可以独立运行,但使用的代价比进程小很多。线程一般包括程序、数据和线程控
325浏览
0点赞

8.2、Python thread模块用法详解

该包在 Python 2 中属于正常可用状态,但在 Python 3 中处于即将废弃的状态,虽然还可以用,但包名被改为 _thread。使用 thread 包首先要引入该包,在 Python 2 中使用下面的语句来引入:import thread而在 Python 3 中,由于包名从 thread 改为了 _thread,所以需要使
259浏览
0点赞

8.3、Python threading模块用法精讲

相对于 thread 包,threading 包提供了更多的功能。该包的用法基本分成两步:第一步是构造一个 threading.Thread 实例对象,这时该对象对应的线程就处于“新建”状态;第二步是操作该对象,如调用 start() 来将该线程转换到“就绪”状态。创建线程实例对象我们可以创建
298浏览
0点赞

8.4、Python线程同步实现方式详解

一个线程启动后,其会自行运行。但如果希望它们能同步运行,应该怎么做呢?举个简单的例子,有两个线程 A 和 B,A 负责从网络上读取数据,保持到变量 X 中,B 负责处理变量X中的数据,这时线程 B 就需要和 A 同步。也就是说 B 需要等 A 给其一个信号,其才可以开始去做
327浏览
0点赞

8.5、Python线程安全(同步锁机制)

所谓线程安全,就是说对某个资源的访问在多线程状态下和单线程状态下得到相同的结果,结果不会受到线程调度等因素的影响。例如下面这段代码,在函数 operate_resource() 中为 g_list 添加一个新元素,新元素的值为 g_list 最后一个元素的值加 1。g_list=[]defoperate_res
324浏览
0点赞

8.6、Python线程死锁的原因及解决方法

死锁是多线程编程中经常讨论的问题,所谓死锁,就是线程一直无限期地等待某个资源。最简单的死锁现象就是一个线程等待一个自己已经拿到的锁。由于该锁已经被自己拿到了,所以第二次申请该锁时会被放到等待队列中,但这个等待的时间是永远。下面的代码演示了这种情况。格
261浏览
0点赞

8.7、什么是进程

在计算机发展的早期阶段,任务调度方式比较简单,计算机从用户处得到任务,然后一直执行下去,直到指定任务完成,然后计算机等待用户的下一个计算任务。在这种运行方式下,任意时刻计算机都只能完成一个任务。如果该任务处于等待状态,计算机也不能执行其他的任务。为了
361浏览
0点赞

8.8、Python subprocess模块用法详解

在 Python 2.7 及 Python 3 中,系统自带了 subprocess 模块,该模块主要用来管理子进程。在使用该模块之前需要将其引入,方法如下:import subprocess在以前,启动一个新的进程可以使用 os.system() 方法。相对来说 subprocess 模块提供了更多的灵活性,可以完全取代 o
317浏览
0点赞

8.9、Python multiprocessing模块精讲

multiprocessing 模块无须安装,从 Python 2.6 开始系统便自带该模块了。该模块的接口函数和 threading 类似,但是它启动的是进程而不是线程。使用该模块时需要先将其引入 multiprocessing,方法如下:import multiprocessing该模块包含很多类,如Lock,其和多线程中的
323浏览
0点赞

8.10、Python os模块用法详解

在本章的最后,我们来介绍一下 os 模块中有关进程的一些接口函数。在前面已经用到了该模块一些接口函数,如得到当前进程的 PID。这些接口函数比较基础,在不太复杂的环境中也是非常有用的。如果必须使用进程的一些高级特性,还是推荐使用 multiprocessing 模块或者 subp
273浏览
0点赞

7.1、Python类的定义与使用

类最基本的功能就是定义了一个新的类型。可以使用下面的语法来定义一个空类,即一个什么属性都没有的类,一个什么事情也做不了的类。class类名:pass这里的类名要求和变量名一样,可以由字母、数字和下划线组成,一般首字符是大写的字母,对于长度没有限制。类定义完之后
267浏览
0点赞

7.2、Python __init__()和__del__()函数的用法

__init__()(后续称之为初始化函数)是用来初始化实例对象的。每次构造一个实例对象时,都会调用该类的初始化函数。在该初始化函数中可以初始化实例对象,或者更新类的某些属性,如该类构造出来的实例对象的个数。初始化函数也可以带参数,通过不同参数来构造不同的实例
271浏览
0点赞

7.3、Python类属性和实例属性

其实类本身也是一个对象,它也有自己的属性。类的属性一般表示类的相关内容,如类的版本和作者等信息。类的属性的定义是在类里面直接定义一个变量即可。下面我们给类 Student 添加版本和作者信息。 class Student: # 定义类Student... version = 1.0 # 类的属性version.
267浏览
0点赞

7.4、Python self的用法

对象属性在类外面使用“对象名。属性”来表示,在类里面使用“self.属性”来表示。对于对象的属性也存在增删改查操作,如可以用赋值语句来修改或者添加属性,通过 del() 来删除对象属性。添加属性对于 Python 这种动态语言来说非常简单,它对添加的时间没有要求,可以在
277浏览
0点赞

7.5、Python getattr()、setattr()、hasattr()和delattr()的用法

除了使用前面介绍的方法来操作属性外,还有一套通用的方法来操作属性。这种方法类似于静态反射机制,即在不知道对象具体定义的情况下,也能通过查询等方式得到该对象的一些情况。如我们得到一个对象 a,但对象 a 是什么类型、包含哪些属性我们都不知道,那么就可以用 di
281浏览
0点赞

7.6、Python静态方法的使用

静态方法就是该方法没有绑定某个对象。和对象方法不同的是,其定义时第一个参数不是 self,这看起来更像一个普通方法。由于没有 self 参数,所以也不能使用“self.属性名”来访问某个对象的属性了。静态方法的定义格式如下:@staticmethoddefstatic_func():pass在 Stude
今日排行
本周排行
本月排行
专业服务,成就每一位AI数据科学家
免费注册体验
联系我们