Python中的多线程是什么?如何实现?(附零基础学习资料)

82 篇文章 5 订阅
75 篇文章 1 订阅

前言

以下是本文所涵盖的所有专业的简要总结:

什么是python中的多线程?

什么时候在Python中使用多线程?

如何在Python中实现多线程?

如何在Python中创建线程?

而不创建类
通过扩展线程类
不扩展线程类
在Python中使用多线程的优点

首先,让我们先尝试理解多任务处理,然后才开始学习Python中的多线程。

Python中的多任务处理是什么?

一般来说,多任务处理是一种同时执行多项任务的能力。在技术上,多任务处理是指操作系统同时执行不同任务的能力。例如,你在你的电脑上下载一些东西,听歌,同时玩游戏等等。所有这些任务都由同一个操作系统同步执行。这只不过是多任务处理,它不仅可以帮助您节省时间,而且还可以提高工作效率。

在操作系统中有两种类型的多任务处理:

以过程为基础
线程基
在本文中,您将了解到 线程基 多任务或 多线程 .

什么是线?

在这里插入图片描述
线程基本上是一个 独立 执行流程。单个进程可以由多个线程组成。程序中的每个线程都执行特定的任务。例如,当你在电脑上玩游戏时,比如说国际足联,整个游戏是一个单一的过程。,但它由几个线程组成,负责播放音乐、接收用户的输入、同步运行对手等。所有这些都是单独的线程,负责在同一个程序中执行这些不同的任务。

每个进程都有一个始终在运行的线程。这是主线。这个主线程实际上创建子线程对象。子线程也由主线程启动。在本文中,我将进一步介绍如何检查当前运行的线程。

因此,我希望你们已经清楚地理解了什么是一条线。接下来,让我们看看Python中的多线程是什么。

什么时候在Python中使用多线程?

多线程是非常有用的节省时间和提高性能,但它不能适用于任何地方。

在前面的FIFA示例中,音乐线程独立于接受输入的线程,而接受输入的线程独立于运行对手的线程。这些线程独立运行,因为它们不相互依赖。

因此,只有当单个线程之间的依赖关系不存在时,才能使用多线程。

本文进一步展示了如何在Python中实现多线程。

如何在Python中实现多线程?

可以通过导入 穿线 模块。

在导入此模块之前,您必须安装此模块。要在anaconda环境中安装它,请在anaconda提示符上执行以下命令:

conda安装-c conda-锻造tbb

成功安装它之后,可以使用以下任何命令导入线程模块:

import threading
from threading import *
现在已经安装了线程模块,让我们继续使用Python进行多线程处理。

如何在Python中创建线程?

Python中的线程可以通过三种方式创建:

而不创建类
通过扩展Thread类
不扩展线程类

而不创建类

Python中的多线程也可以在不创建类的情况下完成。下面是一个演示相同内容的示例:

例子:

from threading import *
print(current_thread().getName())
def mt():
 print("Child Thread")
child=Thread(target=mt)
child.start()
print("Executing thread name :",current_thread().getName())

产出:

MainThread
Child Thread
Executing thread name : MainThread

上面的输出显示,存在的第一个线程是主线程。然后,这个主线程创建一个执行函数的子线程,然后主线程再次执行最后的print语句。

现在让我们继续前进,看看如何通过扩展Thread类在python中执行多线程。

通过扩展Thread类:

当通过扩展Thread类创建子类时,子类表示一个新线程正在执行某些任务。在扩展Thread类时,子类只能覆盖两个方法,即_init_()方法和run()方法。除了这两个方法之外,其他任何方法都不能被重写。

下面是如何扩展Thread类以创建线程的示例:

例子:

import threading
import time
class mythread(threading.Thread):
 def run(self):
 for x in range(7):
 print("Hi from child")
a = mythread()
a.start()
a.join()
print("Bye from",current_thread().getName())

产出:

孩子问好

孩子问好

孩子问好

孩子问好

孩子问好

孩子问好

孩子问好

主线再见

上面的示例显示类myclass继承Thread类,子类,即myclass重写Run方法。默认情况下,任何类函数的第一个参数都必须是Self,它是指向当前对象的指针。输出显示子线程执行run()方法,主线程等待Child执行完成。这是因为JOIN()函数,它使主线程等待子线程完成。

这种创建线程的方法是最好的方法,因为它是标准的方法。但是,如果希望在不继承或扩展Thread类的情况下创建线程,则可以采用以下方式。

不扩展线程类

要在不扩展Thread类的情况下创建线程,可以执行以下操作:

例子:

from threading import *
class ex:
def myfunc(self): #self necessary as first parameter in a class func
 for x in range(7):
 print("Child")
myobj=ex()
thread1=Thread(target=myobj.myfunc)
thread1.start()
thread1.join()
print("done")

产出:

儿童

儿童

儿童

儿童

儿童

儿童

儿童

已完成

子线程执行myfunc,然后主线程执行最后一个print语句。

使用线程的优点

多线程有许多优点,其中一些优点如下:

更好地利用资源
简化代码
允许并发和并行地发生各种任务。
减少时间消耗或响应时间,从而提高性能。
下面是一个示例,用于检查在python中使用和不使用多线程执行代码所需的时间:

Example:
import time
def sqr(n):
 for x in n:
 time.sleep(1)
 x%2
def cube(n):
 for x in n:
 time.sleep(1)
 x%3
n=[1,2,3,4,5,6,7,8]
s=time.time()
sqr(n)
cube(n)
e=time.time()
print(e-s)

产出:

16.042309284210205

以上是在不使用线程的情况下执行程序所需的输出时间。现在让我们使用线程,看看同一个程序发生了什么:

例子:

import threading
from threading import *
import time
def sqr(n):
 for x in n:
 time.sleep(1)
 print('Remainder after dividing by 2',x%2)
def cube(n):
 for x in n:
 time.sleep(1)
 print('Remainder after dividing by 3',x%3)
n=[1,2,3,4,5,6,7,8]
start=time.time()
t1=Thread(target=sqr,args=(n,))
t2=Thread(target=cube,args=(n,))
t1.start()
time.sleep(1)
t2.start()
t1.join()
t2.join()
end=time.time()
print(end-start)

产出: 9.040220737457275

上面的输出清楚地表明,与不使用线程的相同程序执行所需的时间相比,我们使用线程所花费的时间要少得多。

我希望您能够清楚地了解本文中涉及到的与Python中的多线程有关的概念。确保尽可能多地实践,因为这是编程中使用的最重要的概念之一。


这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

零基础Python学习资源介绍

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

在这里插入图片描述

👉入门学习视频👈

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

在这里插入图片描述

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈

在这里插入图片描述

在这里插入图片描述

资料领取

这份完整版的Python全套学习资料已为大家备好,朋友们如果需要可以微信扫描下方二维码添加,输入"领取资料" 可免费领取全套资料有什么需要协作的还可以随时联系我朋友圈也会不定时的更新最前言python知识。↓↓↓
或者

点此链接】领取

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值