本文共 1397 字,大约阅读时间需要 4 分钟。
在之前的学习中,我们已经掌握了Thread多线程的基本创建和管理方法。本节将深入探讨Thread类与线程对象的相关知识。
Thread构造方法的target参数不仅可以是一个函数,还可以是一个对象。这种设计非常符合面向对象编程的理念,使得代码更加简洁和高效。通过将目标封装在对象中,Thread类能够更灵活地管理线程执行。
在Thread类中,创建好的类必须包含**__call__方法**。当线程启动时,Thread会自动调用这个方法。这个方法的主要职责是执行目标函数,确保线程能够按照预期运行。例如,在本节示例代码中,MyThread类的__call__方法调用了目标函数fun,带入相应的参数。
线程函数的执行顺序由其启动顺序决定。在示例代码中,thread1和thread2分别启动了两个线程,分别执行不同的任务。通过thread1.join()和thread2.join(),我们可以确保线程按照预期的顺序执行。需要注意的是,线程执行的具体时间由sleep函数控制。
以下是本节的核心代码:
import threadingfrom time import sleep, ctimeclass MyThread(object): def __init__(self, func, args): self.func = func self.args = args def __call__(self, *args, **kwargs): self.func(*self.args)def fun(index, sec): print('开始执行', index, '时间', ctime()) sleep(sec) print('结束执行', index, '时间', ctime())def main(): print('执行开始时间', ctime()) thread1 = threading.Thread(target=MyThread(fun, (1, 4))) thread1.start() thread2 = threading.Thread(target=MyThread(fun, (5, 4))) thread2.start() thread1.join() thread2.join() 代码执行结果如下:
执行开始时间 Sat Mar 2 19:31:53 2019开始执行 1 时间 Sat Mar 2 19:31:53 2019开始执行 5 时间 Sat Mar 2 19:31:53 2019结束执行 5 时间 Sat Mar 2 19:31:57 2019结束执行 1 时间 Sat Mar 2 19:31:57 2019
通过本节的学习,我们掌握了如何使用Thread类和线程对象来创建和管理多线程程序。通过封装目标函数在Thread对象中,我们能够更方便地编写线程程序,同时保持代码的简洁性和可读性。
转载地址:http://jlofk.baihongyu.com/