Python中Thread类的start和run方法的区别

1)start方法:在Python中,通过调用Thread类的start()方法来启动一个线程。
该方法将立即创建一个新线程并使其可执行。
一旦线程获得了它的CPU时间份额,它就开始执行run()方法。
run()方法定义了线程的执行内容,当执行完毕后,线程就会终止。
因此,start()方法是启动线程的关键,它使线程能够并行运行,而不是顺序运行。
2)Run方法:相比之下,run()方法是常规方法,如果直接调用它,程序执行流程将按顺序继续执行,不会有并行性。
这意味着直接调用run()方法不会创建新的线程,所有操作都会在主线程中再次顺序执行,这与多线程的初衷相悖。
总结:start()方法是一种启动线程并使其并行运行的方法,而run()方法只是普通的线程方法调用,通常在主线程上执行。
编写线程代码时,必须将并行处理任务放在run()方法中,并通过调用start()方法启动线程。
需要注意的是,run()方法必须声明为public,并且没有返回值。

python实现异步编程

在计算机编程中,异步和同步是程序执行方式的两个重要概念。
我们以完成三件事为例,烧水、煮饭、打电话。
如果同步完成,每件事都必须按顺序完成。
假设烧水需要5分钟,做饭需要30分钟,打电话需要2分钟。
总时间至少30分钟。
异步运行时,你可以同时烧水和打电话。
在等待水烧开的同时,你就可以完成打电话、煮饭的准备工作,总共时间只有30分钟。
这种在等待时使用其他任务的方法称为异步实现。
同步执行是指先完成一项任务,然后再执行下一项任务,例如完成数学作业、玩王者荣耀、和女朋友逛街等。
它们不能同时完成,只能依次完成。
在程序中,同步通常涉及计算密集型任务。
异步涉及在等待I/O操作(例如网络请求和读写文件)的同时利用空闲时间执行其他任务。
异步现象主要是程序中I/O操作耗时造成的。
使用同步方法,一项任务完成后才继续进行下一项任务,需要较长的等待时间。
异步方法在遇到I/O操作时将任务挂起,并利用等待时间来执行其他任务。
Python中实现异步编程的常用方法有多线程、多处理、协程等,其中协程在实现异步编程中尤为重要。
协程是程序员定义的一种程序执行机制。
它们本质上是线程执行多个任务的方式。
当遇到I/O操作时会阻塞,等待结果返回才继续。
协程的重要性在于利用等待时间来执行其他任务,提高程序的效率。
Python通过async和wait关键字以及asyncio库实现协程编程。
async关键字用于定义协程函数,wait关键字用于挂起程序并等待可等待对象返回结果。
通过事件循环,可以管理协程的执行过程。
当阻塞操作发生时,它会调度协程执行任务并挂起其他任务。
事件循环是通过asyncio库实现的,并使用get_event_loop()来获取事件循环对象。
在事件循环中注册活动并使用run_until_complete()方法运行协程。
在Python3.7及更高版本中,您可以直接使用asyncio.run()方法来更轻松地创建和使用事件循环。
对于多个任务执行,需要在事件循环中注册任务列表,并使用asyncio.wait()方法来管理任务执行顺序。
当您获取从任务返回的值时,迭代返回的元组以获取有关已完成任务的信息。
实现异步编程的关键是适当使用async和wait关键字并配合事件循环来管理协程执行过程。
活动对象和在异步函数中执行同步函数的机制将在后续文章中详细讨论。