以下是本文所涵盖的所有专业的简要总结:
什么是python中的多线程?
什么时候在Python中使用多线程?
如何在Python中实现多线程?
如何在Python中创建线程?而不创建类
通过扩展线程类
不扩展线程类
在Python中使用多线程的优点
首先,让我们先尝试理解多任务处理,然后才开始学习Python中的多线程。
Python中的多任务处理是什么?
一般来说,多任务处理是一种同时执行多项任务的能力。在技术上,多任务处理是指操作系统同时执行不同任务的能力。例如,你在你的电脑上下载一些东西,听歌,同时玩游戏等等。所有这些任务都由同一个操作系统同步执行。这只不过是多任务处理,它不仅可以帮助您节省时间,而且还可以提高工作效率。
这是小编准备的python学习资料,关注,转发,私信小编“01”即可获取!
在操作系统中有两种类型的多任务处理:以过程为基础
线程基
在本文中,您将了解到线程基多任务或多线程.
什么是线?
线程基本上是一个独立执行流程。单个进程可以由多个线程组成。程序中的每个线程都执行特定的任务。例如,当你在电脑上玩游戏时,比如说国际足联,整个游戏是一个单一的过程。,但它由几个线程组成,负责播放音乐、接收用户的输入、同步运行对手等。所有这些都是单独的线程,负责在同一个程序中执行这些不同的任务。
每个进程都有一个始终在运行的线程。这是主线。这个主线程实际上创建子线程对象。子线程也由主线程启动。在本文中,我将进一步介绍如何检查当前运行的线程。
因此,我希望你们已经清楚地理解了什么是一条线。接下来,让我们看看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中的多线程有关的概念。确保尽可能多地实践,因为这是编程中使用的最重要的概念之一。