首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python多线程实现程序加速

喜欢就点关注吧!

多线程即同时执行多个应用程序,这样可以减少时间消耗,提高程序性能,所以下面就和大家分享Python中多线程的实现。主要包括以下几个方面:

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

什么是线程?

何时在Python中使用多线程?

如何在Python中实现多线程?

多线程的优点

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

通常,多任务处理是同时执行多个任务的能力。在技术方面,多任务处理是指操作系统同时执行不同任务的能力。例如,您正在PC上下载内容以及收听歌曲和同时玩游戏等。所有这些任务都由同一个OS同步执行。这不过是多任务处理,它不仅可以帮助您节省时间,还可以提高工作效率。操作系统中有两种类型的多任务处理:

基于进程

基于线程

什么是线程?

线程基本上是一个独立的执行流程。单个进程可以包含多个线程。程序中的每个线程都执行特定任务。例如,当你在PC上玩游戏时说FIFA,整个游戏只是一个进程,但它由几个负责播放音乐,接受用户输入,同步运行游戏等的线程组成。所有这些都是独立的线程,负责在同一程序中执行这些不同的任务。每个进程都有一个始终在运行的线程。这是主线程。这个主线程实际上创建了子线程对象。子线程也由主线程启动。

何时在Python中使用多线程?

多线程对于节省时间和提高性能非常有用,但它也有一些应用限制。在之前的FIFA示例中,音乐线程独立于获取输入的线程,而获取输入的线程独立于运行游戏的线程。这些线程独立运行,因为它们不是相互依赖的。因此只有各个线程之间不存在依赖关系时才能使用多线程。

如何在Python中实现多线程?

Python中的多线程可以通过导入threading模块来实现。在导入此模块之前,可以使用pip3安装。要在anaconda环境中可以使用conda命令安装。

成功安装后,您可以使用以下一个命令导入threading模块:

如何在Python中创建线程?

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

没有创建一个类

通过扩展Thread类

没有扩展Thread类

没有创建一个类

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

程序表示第一个线程是主线程。然后,该主线程创建一个正在执行该函数的子线程,然后由主线程再次执行最终的print语句。输出结果为:

扩展Thread类:

通过扩展Thread类创建子类时,子类表示新线程正在执行某个任务。扩展Thread类时,子类只能覆盖两个方法,即__init __()方法和run()方法。除了这两种方法之外,没有其他方法可以被覆盖。以下是如何扩展Thread类以创建线程的示例:

输出结果为:

上面的例子表明myclass类继承了Thread类和子类,即myclass重写了run方法。默认情况下,任何类函数的第一个参数都需要是self,它是指向当前对象的指针。输出显示子线程执行run()方法,主线程等待子进程执行完成。这是因为join()函数使主线程等待子进程完成。这种创建线程的方法是最标准的方法,但是如果您想在不继承或扩展Thread类的情况下创建线程,可以参见下一个示例。

没有扩展Thread类

要在不扩展Thread类的情况下创建线程,可以通过以下示例代码:

程序通过子线程执行myfunc,之后主线程执行最后一个print语句。输出结果为:

使用线程的优点

总结多线程的优点如下:

更好地利用资源

简化代码

允许并发和并行发生各种任务

减少时间消耗或响应时间,从而提高性能。

下面通过一个示例来比较在python中使用和不使用多线程执行代码所需的时间:

首先我们计算不使用线程所需要的时间,程序如下:

需要时间为:9.040220737457275。通过以上一个简单的示例比较可以看出与不使用线程执行相同程序所花费的时间相比,我们使用线程所花费的时间要少得多。因此在执行多个相互间不冲突的任务时,可以通过多线程进行程序加速。

参考

https://www.edureka.co/blog/artificial-intelligence-applications/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190719A04RIK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com