Python——线程与进程、信号和槽、API和接口。
文章目录
前言
本篇内容简要地介绍了线程与进程、信号和槽、API和接口的基本概念、特点、应用场景等。
如有错误、不恰当之处,请路过的大佬指点。
一、线程与进程是什么?
1.基本介绍:
- 线程是执行上下文,它是cpu执行指令流所需的所有信息。
- 线程是操作系统能够进行运算调度的最小单元。
- 它被包含在进程中,是进程中的实际运作单位。
- 程序中正在执行的实例被称作进程。
- 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
2.线程和进程的区别:
参考链接:https://www.cnblogs.com/yuanchenqi/articles/5733873.html
- 线程共享创建它的进程的地址空间。
- 进程有自己的地址空间。
3.Python——Thread类:
- 以Python为例: Thread类表示在单独的控制线程中运行的活动。
- 有两种方法可以指定这种活动:给构造函数传递回调对象或在子类中重写run() 方法。
- 一个线程能调用别的线程的join()方法。这将阻塞调用线程,直到拥有join()方法的线程的调用终止。
threads = [] # 添加到并行集合线程/或者理解建立多线程
global conn # 全局变量监控多线程是否全部完成
newthread = ClientThread(ip, port, window) # 举例客户端线程引入
newthread.start() # start启动线程的活动
threads.append(newthread) # 添加到并行集合线程,这里只用到一个,也可以写多个
for t in threads: # 遍历线程运行
t.join() # 调用别的线程
下面演示个简单实例
import threading #引入模块或类
# 先定义两个要运行的函数
def fun1():
def fun2():
# 添加到并行集合中
threads=[]
threads.append(threading.Thread(target=fun1))
threads.append(threading.Thread(target=fun1))
#开跑
for t in threads:
t.start()
二、信号和槽是什么?
1.基本介绍:
基本语法:对象名(信号).destroyed.connect(槽函数名)
- 通俗的说就是执行到某处时(发出信号被接受)调用函数。
2.信号和槽的特点:
- 一个槽可以监听多个信号。
- 一个信号可以连接多个槽函数。
- 一个信号也可以连接另一个信号。
- 信号的参数可以是任何python类型。
- 槽函数的定义必须在使用之前,当对象销毁时自动调用槽函数。
3.常用操作:
objectNameChanged.connect(cao) #名称改变发出信号
objectNameChanged.disconnect(cao) #断开连接
blockSignals(True) #临时阻断连接
blockSignals(False) #临时恢复连接
signalsBlocked() #判断信号是否被阻止
4.connect( )——有无参数的区别:
- 信号和槽的连接具体用到QObject:connect函数。
- 当connect里面放的函数没有参数需要传递,可以直接用一个函数名放在括号里面。
- 但是当我们需要放参数的时候,要改写成lambda。
self.ui.tr1.clicked.connect(lambda:self.get_filename(1))
三、API和接口是什么?
1.API是什么?
- API 是用于构建应用程序软件的一组子程序定义,协议和工具。
- 接口是不同组件进行交互的地方。
- 协议是一系列规定了他们之间怎样进行交互的规则。
- 格式定义了他们通过什么进行交流(JSON或者是XML)。
- 端点可以在同一个接口里面提供不同的功能。
2.接口是什么?
基本介绍
- 接口是一系列方法的声明,是一些方法特征的集合(以java为例)一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现也可以具有不同的行为(功能)。
- 通俗易懂的来说:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为一种抽象类,即接口中的方法必须全部是抽象方法。抽象类可以有定义方法体的方法、接口只有抽象方法。
接口的特点:
- 接口使用 interface关键字修饰。
- 接口是常量和抽象方法的集合,在JDK1.8之后还可以有 静态方法和默认方法。
- 接口中的常量默认省略 public static final。
- 接口中的方法默认省略 public abstract。
- 接口不能够实例化。
- 如果想要"实例化"一个接口,必须使用多态(接口多态)。
- 接口是一种规范。
- 接口可以扩展功能。
- 接口是灵活的。
接口和类组合:
- 类和类: 单继承不能多继承,不能多实现。
- 类和接口: 多实现, 不能够多继承。
- 接口和接口: 多继承, 不能多实现。
接口子类的特点:
- 如果一个类想要实现一个接口,那么就必须实现该接口中所有的抽象方法。
- 如果一个类不想要实现接口,那么该类升级为接口。
什么时候用?
当抽取多个共性代码或者设计复杂类的时候使用继承,其他一律接口。
接口的分类:
- webService接口:走soap协议通过http传输,请求报文和返回报文都是xml格式的。测试时需要通过工具才能进行调用、测试。少数公司还在使用这种接口,如医院等行业。
- http api接口:走http协议,通过路径来区分调用的方法,请求和报文都是key-value形式的,返回报文一般都是json串,有get和post等方法。目前来讲,是最常用的。
接口的便利:
- 接口用来描述一种抽象,例如java这种不支持多继承的编程语言,可以通过实现接口来弥补这个局限。
- 接口也被用来实现解耦。
- 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public, static的。