从零开始学python | Python中的线程:了解如何在Python中使用线程

举报
Yuchuan 发表于 2021/04/08 23:46:22 2021/04/08
【摘要】 它是Python最方便的功能之一。通过正确使用它,您可以使整个编码过程更加轻松和高效。从上面的文章中,我们希望您已经学习了线程的基础知识,并将在您的日常编程中继续使用它。

如今,Python已成为全球最受欢迎的编程语言之一。自1990年代成立以来,它已经吸引了众多的追随者以及每天致力于使这种编程语言变得更好的发烧友和编码人员。在Python生态系统中内置的许多功能中,最引人注目的是线程。因此,在本文中,我们将讨论有关Python中的线程的所有知识,以及如何利用它以及它的优缺点。

本文将介绍以下指针,

让我们开始吧

用Python进行线程化

什么是Python中的线程?

Python中的线程可以简单地定义为单独的执行流程。这仅意味着在您的程序中,将同时执行两个不同的进程。Python线程的一个有趣方面是,在第3版之后,Python中的多个线程不会同时执行,而只是看上去只是在执行。 

同时运行两个不同的进程让人感到很惊奇,但需要了解的是,Python 3及更高版本的当前版本是以这样一种方式编码的,即只能在任何给定的时间点运行该进程。但是,如果需要在CPython中同时将两个或多个进程同时使用,则还需要用其他语言(例如C,C ++和Java)编写一些代码,然后在Python中通过多线程运行它们。 

Python中最著名的线程优势之一是它具有提高设计清晰度的能力。 

在此之前,我们对Python中的线程有一些了解,让我们了解如何启动线程,

在Python中启动线程

既然您已经习惯了使用Python定义线程,那么让我们来看一个有关如何使用Python创建自己的线程的示例。为了在Python中创建线程,您首先需要导入线程库,然后指示它启动(),如下例所示:

import logging
import threading
import time
def thread_function(name):
logging.info("Thread %s: starting", name)
time.sleep(2)
logging.info("Thread %s: finishing", name)
if __name__ == "__main__":
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO,
datefmt="%H:%M:%S")
logging.info("Main    : before creating thread")
x = threading.Thread(target=thread_function, args=(1,))
logging.info("Main    : before running thread")
x.start()
logging.info("Main    : wait for the thread to finish")
# x.join()
logging.info("Main    : all done")

输出

输出-Python中的线程-Edureka

在Python中运行线程时,会将其作为函数传递,该函数包含需要执行的参数列表。在上面共享的示例中,您正在指示Python运行线程thread_function()并将其作为参数传递给1。 

当您运行上述程序时,输出将如下所示。 

这篇关于“ Python中的线程”的文章的下一部分,让我们看看什么是守护程序线程,

什么是守护进程线程?

用技术术语,可以将守护程序定义为主要在后台运行的进程。但是,在Python中,守护程序线程具有非常特定的含义。在Python中,守护程序线程将在程序退出时立即关闭,尽管在其他编程语言中,它将继续在后台运行。如果在某个程序中没有将线程编程为守护程序线程,则解释器将等待它完成操作,然后仅关闭解释器。 

为了更好地理解这个概念,请看一下上面的例子。在第二行中,程序在完成所有任务后等待几​​秒钟。这是因为它正在等待非守护线程完成其操作,然后退出该接口。一旦线程完成其操作,则仅程序退出。 

现在让我们修改上面的程序,看看如果在代码中插入一个守护线程,会发生什么。 

新代码:x = threading.Thread(target = thread_function,args = {1,),daemon = True)

当您运行上面的程序并进行了修改时,它将看起来像这样。 

输出-Python中的线程-Edureka

这两个输出之间的区别在于,最新的输出缺少最后一行。thread_function()没有机会完成,因为我们插入了一个守护程序线程,当它到达末尾时,它退出了程序。

加入线程

既然您已经了解了在Python中创建线程的概念以及守护线程的概念,那么让我们发现如何在Python中加入线程。 

通过在Python中使用join()函数,您可以连接两个不同的线程,还可以指示一个线程等待另一个线程完成执行。当您对大型应用程序进行编码并且需要以特定顺序执行所有进程时,此功能通常会派上用场 

本文有关“ Python线程”的最后一部分将向您展示有效的“多线程”,

使用多线程

在上面的示例中,我们谈到了如何一次使用两个线程。但是,如果在特定情况下需要同时使用多个线程,该怎么办?为了更好地了解情况,请看以下示例。 

import logging
import threading
import time
def thread_function(name):
logging.info("Thread %s: starting", name)
time.sleep(2)
logging.info("Thread %s: finishing", name)
if __name__ == "__main__":
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO,
datefmt="%H:%M:%S")
threads = list()
for index in range(3):
logging.info("Main    : create and start thread %d.", index)
x = threading.Thread(target=thread_function, args=(index,))
threads.append(x)
x.start()
for index, thread in enumerate(threads):
logging.info("Main    : before joining thread %d.", index)
thread.join()
logging.info("Main    : thread %d done", index)

输出

输出-Python中的线程-Edureka

在上面的程序中,我们遵循了导入线程库,启动线程,创建多个线程,然后使用join()函数将所有内容组合在一起并以特定顺序执行的相同过程。 

当您运行上述程序时,结果将如下所示。 

结论

它是Python最方便的功能之一。通过正确使用它,您可以使整个编码过程更加轻松和高效。从上面的文章中,我们希望您已经学习了线程的基础知识,并将在您的日常编程中继续使用它。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。