一、基本介绍
线程(Threading)
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。Python的threading
模块允许你创建线程,以并行地执行任务。
协程(Coroutine)
协程是一种程序组件,它允许挂起和恢复执行,通常用于异步编程。在Python中,协程可以通过asyncio
库实现,这是Python用于编写单线程并发代码的库。
协程 + 线程
虽然协程主要用于异步I/O操作,但有时你可能需要在协程中执行阻塞操作,比如访问数据库或调用外部API。在这种情况下,你可以将阻塞操作放在线程中执行,以避免阻塞整个协程的执行。
二、简单示例
import asyncio
import threading# 这是一个阻塞函数,模拟耗时的I/O操作
def blocking_io():import timeprint("Start blocking IO")time.sleep(2) # 模拟耗时操作print("End blocking IO")return "Blocking IO result"# 这是一个异步函数,它将在协程中运行
async def main():print("Start main coroutine")# 创建一个线程来运行阻塞函数thread = threading.Thread(target=blocking_io)thread.start()# 等待线程完成thread.join()# 继续协程的其他工作print("Continue with coroutine")await asyncio.sleep(1) # 模拟异步操作print("End main coroutine")# 运行事件循环
asyncio.run(main())