进程、线程、协程
关系
- 一个进程至少有一个线程, 进程里面可以有多个线程
- 一个线程里面可以有多个协程
进程
== >线程
== >协程
对比
- 协程切换任务资源很小,效率高
- 多线程,多进程,根据CPU核数不一样,可能是并行的
- 但是
协程是在一个线程中
,所以是并发
开辟协程需要的资源最少
多进程 + 多线程
- 再多进程中使用进程池的方式,根据CPU个数生成多个进程
- 在单个进程中,再创建多个线程
- 最后把真正计算的代码放到单线程执行的Function中
"""多进程 + 多线程"""
import os
import threading
from multiprocessing import Pool, cpu_count
def thread_func(num):
"""
线程中执行的Function
"""
print({"Num": num, "Pid": os.getpid(), "Thread": threading.currentThread()})
def process_func(num):
"""
调用多个线程,执行线程中的Function
"""
for i in range(2): # 设置单个进程中 线程的个数
# 创建并启动当前线程
threading.Thread(target=thread_func, args=(num,)).start()
if __name__ == '__main__':
pool = Pool(cpu_count()) # 适应CPU个数的进程池 ==> 进程数在这里写过了
for num in range(4): # range里面的值只是 需要处理的数据量
# 执行当前进程中的Function
pool.apply_async(process_func, args=(num,))
pool.close()
pool.join()
使用协程最简单的方法,就是在一个Function中使用
yield
返回,这样就能一边返回当前函数中的数据,一边在接受函数输出时候还可以直接调用
评论区