首页 > 编程语言 >python3多线程

python3多线程

时间:2023-05-28 09:55:35浏览次数:30  
标签:thread Thread self threading 线程 多线程 python3

1、线程和进程
计算机资源,指的是cpu计算资源、内存资源、接口读写资源等。
进程:计算机中用于分配资源的最小个体。不同进程之间并不共享内存。
线程:是进程内部的资源分配对象,一个进程最少会有一个线程。同一进程下的不同线程可以共享内存。

2、并行和并发
并行:同一时间段,交替前行。并发:同时发生。
对于单核CPU、早期伪多核CPU、以及某些编程语言而言,实际多线程是并行实现并发效果。

多线程的用处:
(1)对于重复读写端口、等待响应这类程序,可以使用多线程进行并发的操作,提高效率
(2)多线程可以将其他任务放在后台执行,不影响主线程序响应用户操作,尤其是GUI环境

3、模块
python3有__thread和threading两个模块可以分别实现多线程功能。
其中__thread模块是废弃的thread模块的替代,不建议使用,只是为了考虑python3的兼容,功能也较少。所以也不做分析。

threading是推荐使用,支持功能更多。

4、threading模块
4.1 基于继承线程类实现
(1)定义线程类,继承threading.Thread类,将本类对象self通过threading.Thread.__init__方法绑定到线程机制。
(2)定义run方法。run方法具备了线程性质,会被线程类创建的对象调用start方法时启动。
(3)创建线程类对象,可以是多个对象,每个对象都可以通过start方法启动开始执行其run方法

4.2 基于直接创建线程类对象实现

def my_ui_set(self):
    self.pushButton_1.clicked.connect(self.listen)
    self.workspace_path = ''
def listen(self):
    thread = threading.Thread(target=self.listen_thread)
    thread.start()
def listen_thread(self):
    os.system('mitmdump -s web_listener_listen.py')

4.3 模块函数

threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

5、threading.Thread类
这是threading模块下的核心类。

5.1 类和初始化

class Thread:
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs=None, *, daemon=None):

group 应该为None,作为未来的扩展当ThreadGroup类被实现
target,指调用的线程方法。如果是继承Thread类,那么实际过程就是调用子类重写的run方法。如果是直接通过Thread初始化,那么需要显式的指定目标方法或函数。
name 线程名称,默认情况下,唯一名称由形式为“Thread-N”,其中N是小的十进制数。
args 是target指向方法调用的参数元组,默认是()
kwargs 是target调用的关键字参数字典,默认是{}

3、属性

    _initialized = False

4、方法
(1)start
启动线程,执行target对应的方法或函数
(2)run
Thread类的子类需要重写该方法,定义线程执行的任务代码
(3)join
join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
将当前线程加入到主线程中,即当前线程执行完后不会直接关闭程序,而是由主线程决定
默认的,当线程执行完后,会关闭程序
(4)name
获取设置的name属性,str类型
(5)其他
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名。

标签:thread,Thread,self,threading,线程,多线程,python3
From: https://www.cnblogs.com/wd404/p/17320465.html

相关文章

  • python3函数
    1、介绍def函数名(参数列表):函数体在python中,可以直接在.py文件中,通过关键字def创建函数。2、函数与解释型python是解释型编程语言,从上到下解析,所以在调用函数时,该函数必须已经被声明。如果是在函数B声明之前,py文件中直接调用B,那么pycharm会提示异常如果是在函数B声明......
  • C++多线程
    多线程:thread_local每个线程都会有自己的一份数据,不会共享数据,避免竞争 volatile告诉编译器每次取数据都要从内存里取 使用情况:信号处理内存映射相关非本地跳转 std::atomic定义操作为原子操作,不可被线程分开 接口  std::shreadC++的线程类,但是不保证......
  • Java大文件分片上传/多线程上传方案
    ​ 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。先说下要求:PC端全平台支持,要求支持Windows,Mac,Linux支持所有浏览器。支持文件批量上传支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W......
  • Java大文件分片上传/多线程上传实例解析
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1. 通过form表单向后端发送请求         <formid="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="pos......
  • Java大文件分片上传/多线程上传源代码
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • 编译安装python3.11.3
     1、下载源码包cd/usr/local/srcwget'https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz' 2、解压xz-dPython-3.11.3.tar.xztarzfPython-3.11.3.tar 3、安装编译工具和依赖包yum-yinstallgcc-c++openssl-devel 4、配置mkdir-p/......
  • Java大文件分片上传/多线程上传源码
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • Java大文件分片上传/多线程上传代码
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式:post(get方式提交有大小限制,post没有)2.表单的enctype属性:必须设置为multipart/form-data.3.表单必须......
  • 【java】同步异步和多线程编程
    Java基本概念并发基于时间段内的,同时发生(处理多个任务的能力,时间段)存在同步和互斥的问题(任务之间的时序问题)同步:前一个处理的结果作为下一个处理的资源(互相之间有依赖)互斥:不能同时使用临界资源。解决时序问题的机制:锁,信号量,原子操作Java中的多线程机制并行(完全......
  • 使用Java 锁机制实现多线程售票案例
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"及“慕课网公众号”!作者:王军伟Tech|慕课网讲师1.前言本文主要是使用Java的锁机制对多线程售票案例进行实现。售票案例多数情况下主要关注多线程如何安全的减少库存,也就是剩余的票数,当票数为0时,停止......