进程、线程、协程
关系
- 一个进程至少有一个线程, 进程里面可以有多个线程
- 一个线程里面可以有多个协程
- 进程== >- 线程== >- 协程

对比
- 协程切换任务资源很小,效率高
- 多线程,多进程,根据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返回,这样就能一边返回当前函数中的数据,一边在接受函数输出时候还可以直接调用
 
             
           
             
                         
             
            
评论区