线程与进程、信号和槽、API和接口

发布于:2022-12-21 ⋅ 阅读:(612) ⋅ 点赞:(0)

Python——线程与进程、信号和槽、API和接口。



前言

本篇内容简要地介绍了线程与进程、信号和槽、API和接口的基本概念、特点、应用场景等。
如有错误、不恰当之处,请路过的大佬指点。


一、线程与进程是什么?

1.基本介绍:

  1. 线程是执行上下文,它是cpu执行指令流所需的所有信息。
  2. 线程是操作系统能够进行运算调度的最小单元。
  3. 它被包含在进程中,是进程中的实际运作单位。
  4. 程序中正在执行的实例被称作进程。
  5. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

2.线程和进程的区别:

参考链接:https://www.cnblogs.com/yuanchenqi/articles/5733873.html

  1. 线程共享创建它的进程的地址空间。
  2. 进程有自己的地址空间。

3.Python——Thread类:

  1. 以Python为例: Thread类表示在单独的控制线程中运行的活动。
  2. 有两种方法可以指定这种活动:给构造函数传递回调对象或在子类中重写run() 方法。
  3. 一个线程能调用别的线程的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(槽函数名)

  1. 通俗的说就是执行到某处时(发出信号被接受)调用函数。

2.信号和槽的特点:

  1. 一个槽可以监听多个信号。
  2. 一个信号可以连接多个槽函数。
  3. 一个信号也可以连接另一个信号。
  4. 信号的参数可以是任何python类型。
  5. 槽函数的定义必须在使用之前,当对象销毁时自动调用槽函数。

3.常用操作:

objectNameChanged.connect(cao)   	#名称改变发出信号
objectNameChanged.disconnect(cao)   #断开连接
blockSignals(True)                  #临时阻断连接
blockSignals(False)                 #临时恢复连接
signalsBlocked()                    #判断信号是否被阻止

4.connect( )——有无参数的区别:

  1. 信号和槽的连接具体用到QObject:connect函数。
  2. 当connect里面放的函数没有参数需要传递,可以直接用一个函数名放在括号里面。
  3. 但是当我们需要放参数的时候,要改写成lambda。
  self.ui.tr1.clicked.connect(lambda:self.get_filename(1)) 

三、API和接口是什么?

1.API是什么?

  1. API 是用于构建应用程序软件的一组子程序定义,协议和工具。
  2. 接口是不同组件进行交互的地方。
  3. 协议是一系列规定了他们之间怎样进行交互的规则。
  4. 格式定义了他们通过什么进行交流(JSON或者是XML)。
  5. 端点可以在同一个接口里面提供不同的功能。

2.接口是什么?

基本介绍

  1. 接口是一系列方法的声明,是一些方法特征的集合(以java为例)一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现也可以具有不同的行为(功能)。
  2. 通俗易懂的来说:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为一种抽象类,即接口中的方法必须全部是抽象方法。抽象类可以有定义方法体的方法、接口只有抽象方法。

接口的特点:

  1. 接口使用 interface关键字修饰。
  2. 接口是常量和抽象方法的集合,在JDK1.8之后还可以有 静态方法和默认方法。
  3. 接口中的常量默认省略 public static final。
  4. 接口中的方法默认省略 public abstract。
  5. 接口不能够实例化。
  6. 如果想要"实例化"一个接口,必须使用多态(接口多态)。
  7. 接口是一种规范。
  8. 接口可以扩展功能。
  9. 接口是灵活的。

接口和类组合:

  1. 类和类: 单继承不能多继承,不能多实现。
  2. 类和接口: 多实现, 不能够多继承。
  3. 接口和接口: 多继承, 不能多实现。

接口子类的特点:

  1. 如果一个类想要实现一个接口,那么就必须实现该接口中所有的抽象方法。
  2. 如果一个类不想要实现接口,那么该类升级为接口。

什么时候用?
当抽取多个共性代码或者设计复杂类的时候使用继承,其他一律接口。

接口的分类:

  1. webService接口:走soap协议通过http传输,请求报文和返回报文都是xml格式的。测试时需要通过工具才能进行调用、测试。少数公司还在使用这种接口,如医院等行业。
  2. http api接口:走http协议,通过路径来区分调用的方法,请求和报文都是key-value形式的,返回报文一般都是json串,有get和post等方法。目前来讲,是最常用的。

接口的便利:

  1. 接口用来描述一种抽象,例如java这种不支持多继承的编程语言,可以通过实现接口来弥补这个局限。
  2. 接口也被用来实现解耦。
  3. 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public, static的。

网站公告

今日签到

点亮在社区的每一天
去签到