前言
以下是本文所涵盖的所有专业的简要总结:
什么是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知识。↓↓↓
或者
【点此链接】领取
![](https://i-blog.csdnimg.cn/blog_migrate/7a63c01de41ad780c3da0f7ca68ca3b4.png)