广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python线程的创建与常用方法是什么
  • 258
分享到

Python线程的创建与常用方法是什么

2023-06-30 11:06:29 258人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么

这篇文章主要介绍“python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Python线程的创建与常用方法是什么

线程的创建与使用

在Python中有很多的多线程模块,其中 threading 模块就是比较常用的。下面就来看一下如何利用 threading 创建线程以及它的常用方法。

线程的创建 -threading

函数名介绍举例
Thread创建线程Thread(target, args)

Thread 的动能介绍:通过调用 threading 模块的 Thread 类来实例化一个线程对象;它有两个参数: target 与 args (与创建进程时,参数相同)。target 为创建线程时要执行的函数,而 args 为是要执行这个函数时需要传入的参数。

线程对象的常用方法

接下里看一下线程对象中都有哪些常用的方法:

函数名介绍用法
start启动线程start()
join阻塞线程直到线程执行结束join(timeout=None)
getName获取线程的名字getName()
setName设置线程的名字setName(name)
is_alive判断线程是否存活is_alive()
setDaemon守护线程setDaemon(True)
  • start 函数:启动一个线程;没有任何返回值和参数。

  • join 函数:和进程中的 join 函数一样;阻塞当前的程序,主线程的任务需要等待当前子线程的任务结束后才可以继续执行;参数为 timeout:代表阻塞的超时时间。

  • getName 函数:获取当前线程的名字。

  • setName 函数:给当前的线程设置名字;参数为 name:是一个字符串类型

  • is_alive 函数:判断当前线程的状态是否存货

  • setDaemon 函数:它是一个守护线程;如果脚本任务执行完成之后,即便进程池还没有执行完成业务也会被强行终止。子线程也是如此,如果希望主进程或者是主线程先执行完自己的业务之后,依然允许子线程继续工作而不是强行关闭它们,只需要设置 setDaemon() True 就可以了。

PS:通过上面的介绍,会发现其实线程对象里面的函数几乎和进程对象中的函数非常相似,它们的使用方法和使用场景几乎是相同的。

线程演示案例

单线程初始案例

演示 多线程之前 先看一下下面这个案例,运行结束后看看共计耗时多久

定义一个列表,里面写一些内容。

再定义一个新列表,将上一个列表的内容随机写入到新列表中;并且删除上一个列表中随机获取到的内容。

这里需要使用到 r andom 内置模块

代码示例如下:

coding:utf-8import timeimport randomold_lists = ['罗马假日', '怦然心动', '时空恋旅人', '天使爱美丽', '天使之城', '倒霉爱神', '爱乐之城']new_lists = []def work():    if len(old_lists) == 0:     # 判断 old_list 的长度,如果为0 ,则表示 该列表的内容已经被删光了        return '\'old_list\' 列表内容已经全部删除'    old_choice_data = random.choice(old_lists)      # random 模块的 choice函数可以随机获取传入的 old_list 的元素    old_lists.remove(old_choice_data)               # 当获取到这个随机元素之后,将该元素从 old_lists 中删除    new_choice_data = '%s_new' % old_choice_data    # 将随机获取到的随机元素通过格式化方式重新赋值,区别于之前的元素    new_lists.append(new_choice_data)               # 将格式化的新的随机元素添加至 new_lists 列表    time.sleep(1)if __name__ == '__main__':    strat_time = time.time()    for i in range(len(old_lists)):        work()    if len(old_lists) ==0:        print('\'old_lists\' 当前为:{}'.fORMat(None))    else:        print(('\'old_lists\' 当前为:{}'.format(old_lists)))    if not len(new_lists) == 0:        print(('\'new_lists\' 当前为:{}'.format(new_lists)))    else:        print('\'new_lists\' 当前为:{}'.format(None))    end_time = time.time()    print('运行结束,累计耗时:{} 秒'.format(end_time - strat_time))

运行结果如下:


Python线程的创建与常用方法是什么

从运行输出结果我们可以看到整个脚本运行共计耗时7秒,而且 new_lists 列表内的元素都经过格式化处理后加上了 _new ;不仅如此, 因为 random模块的choice函数 原因,new_lists 的内容顺序与 old_lists 也是不一样;每次运行顺序都会不一样,所以 old_lists 的顺序是无法得到保障的。


多线程演示案例

代码示例如下:

# coding:utf-8import timeimport randomimport threadinGold_lists = ['罗马假日', '怦然心动', '时空恋旅人', '天使爱美丽', '天使之城', '倒霉爱神', '爱乐之城']new_lists = []def work():    if len(old_lists) == 0:     # 判断 old_list 的长度,如果为0 ,则表示 该列表的内容已经被删光了        return '\'old_list\' 列表内容已经全部删除'    old_choice_data = random.choice(old_lists)      # random 模块的 choice函数可以随机获取传入的 old_list 的元素    old_lists.remove(old_choice_data)               # 当获取到这个随机元素之后,将该元素从 old_lists 中删除    new_choice_data = '%s_new' % old_choice_data    # 将随机获取到的随机元素通过格式化方式重新赋值,区别于之前的元素    new_lists.append(new_choice_data)               # 将格式化的新的随机元素添加至 new_lists 列表    time.sleep(1)if __name__ == '__main__':    strat_time = time.time()    print('\'old_lists\'初始长度为:{}'.format(len(old_lists)))# 获取 old_lists 与 new_lists 最初始的长度    print('\'new_lists\'初始长度为:{}'.format(len(new_lists)))    thread_list = []        # 定义一个空的 thread_list 对象,用以下方添加每个线程    for i in range(len(old_lists)):        thread_work = threading.Thread(target=work)     # 定义一个线程实例化对象执行 work 函数,因为 work 函数没有参数所以不用传 args        thread_list.append(thread_work)                 # 将 thread_work 添加进 thread_list        thread_work.start()                             # 启动每一个线程    for t in thread_list:   # 通过for循环将每一个线程进行阻塞        t.join()    if len(old_lists) ==0:        print('\'old_lists\' 当前为:{}'.format(None), '当前长度为:{}'.format(len(old_lists)))    else:        print(('\'old_lists\' 当前为:{}'.format(old_lists)))    if not len(new_lists) == 0:        print('\'new_lists\' 当前长度为:{}'.format(len(new_lists)))        print('\'new_lists\' 当前的值为:{}'.format(new_lists))    else:        print('\'new_lists\' 当前为:{}'.format(None))    end_time = time.time()    print('运行结束,累计耗时:{} 秒'.format(end_time - strat_time))

运行结果如下:


Python线程的创建与常用方法是什么

从运行的结果来看,我们初始的单线程任务耗时为 7秒,在使用多线程之后,仅耗时 1秒就完成了,大大的提高了我们的运行效率。


线程的问题

通过上面的练习,我们发现线程的使用方法几乎与进程是一模一样的。它们都可以互不干扰的执行程序,也可以使得主线程的程序不需要等待子线程的任务完成之后再去执行。只不过刚刚的演示案例中我们使用了 join() 函数进行了阻塞,这里可以吧 join() 去掉,看看执行效果。

与进程一样,线程也存在着一定的问题。

  • 线程执行的函数,也同样是无法获取返回值的。

  • 当多个线程同时修改文件一样会造成被修改文件的数据错乱的错误(因为都是并发去操作一个文件,特别是在处理交易场景的时候,需要尤为注意)。

到此,关于“Python线程的创建与常用方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python线程的创建与常用方法是什么

本文链接: https://www.lsjlt.com/news/328676.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python线程的创建与常用方法是什么
    这篇文章主要介绍“Python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么...
    99+
    2023-06-30
  • Python语法学习之线程的创建与常用方法详解
    目录线程的创建与使用线程的创建 -threading线程对象的常用方法线程演示案例线程的问题线程的创建与使用 在Python中有很多的多线程模块,其中 threading ...
    99+
    2022-11-10
  • linux线程的创建方法是什么
    在Linux系统中,可以使用pthread库来创建线程。pthread库是一个POSIX线程库,提供了一系列函数来创建、管理和同步线...
    99+
    2023-08-30
    linux
  • java线程池创建的方法是什么
    在Java中,线程池可以使用以下两种方法来创建: 使用`Executors`类中的静态方法来创建线程池: ExecutorSer...
    99+
    2023-10-25
    java
  • c++创建多线程的方法是什么
    在C++中,有多种方法可以创建多线程。以下是其中几种常见的方法: 使用std::thread类:std::thread类是C++标...
    99+
    2023-10-25
    c++
  • java创建多线程的方法是什么
    在Java中,有两种常见的方法来创建多线程:1. 继承Thread类:创建一个继承自Thread类的子类,重写run()方法,并在r...
    99+
    2023-08-16
    java
  • Singleton模式创建、多线程与销毁的方法是什么
    这篇文章主要介绍“Singleton模式创建、多线程与销毁的方法是什么”,在日常操作中,相信很多人在Singleton模式创建、多线程与销毁的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Singl...
    99+
    2023-06-18
  • Java线程创建与Thread类的使用方法
    目录1.线程与Thread类1.1操作系统中的线程与Java线程1.1.1线程与Thread类1.1.2Thread类的构造方法1.1.3启用java线程必会的方法1.2第一个Jav...
    99+
    2022-11-13
  • Linux线程的创建方式是什么
    这篇文章主要介绍“Linux线程的创建方式是什么”,在日常操作中,相信很多人在Linux线程的创建方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux线程的创建方式是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • Python语法学习之进程的创建与常用方法详解
    目录进程的创建模块 - multiprocessing创建进程函数 - Process进程的常用方法start 函数join 函数kill 函数 与 is_alive 函数进程的相关...
    99+
    2022-11-10
  • Java中线程的创建方式是什么
    本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一. 继承Thread可以通过创建...
    99+
    2023-07-05
  • Python装饰器常用的创建方式是什么
    这篇文章主要介绍“Python装饰器常用的创建方式是什么”,在日常操作中,相信很多人在Python装饰器常用的创建方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python装饰器常用的创建方式是什么...
    99+
    2023-06-30
  • Java匿名内部类创建线程的方法是什么
    在Java中,可以使用匿名内部类创建线程的方法是通过继承Thread类或实现Runnable接口。1. 继承Thread类:```T...
    99+
    2023-09-11
    Java
  • excel创建在线表格的方法是什么
    创建在线表格的方法有以下几种:1. 使用Excel Online: Excel Online是Microsoft提供的在线电子表格工...
    99+
    2023-09-12
    excel
  • python字典创建的方法是什么
    Python字典有多种创建的方法,以下是几种常见的方法: 使用花括号{}创建一个空字典: my_dict = {} 使用花括...
    99+
    2023-10-23
    python
  • python下thread模块创建线程的方法
    本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!thread方法对创建线程有效且直...
    99+
    2023-06-20
  • java对象的创建与使用方法是什么
    Java对象的创建与使用方法如下:1. 定义类:在Java中,对象的创建需要先定义类。类是一个抽象的概念,用于描述对象的属性和行为。...
    99+
    2023-05-13
    java对象的创建 java
  • Python创建类并使用的方法是什么
    在Python中创建类并使用的方法如下:1. 使用`class`关键字定义一个类,并指定类的名称。2. 在类中定义类的属性和方法。3...
    99+
    2023-09-27
    Python
  • python的多线程创建的方法有哪些
    本篇内容介绍了“python的多线程创建的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python多线程一、线程的概念线程是CP...
    99+
    2023-07-04
  • python创建空文件的方法是什么
    Python中创建空文件的方法有多种,以下是其中几种常见的方法:1. 使用open()函数创建空文件:```pythonfile =...
    99+
    2023-08-12
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作