线程池与进程池
线程池与进程池
为什么要装到容器中
- 可以避免频繁的创建和销毁(进程/线程)来的资源开销
- 可以限制同时存在的线程数量 以保证服务器不会应为资源不足而导致崩溃
- 帮我们管理了线程的生命周期
- 管理了任务的分配
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from threading import activeCount,enumerate,current_thread
#创建线程池
pool = ThreadPoolExecutor(2) #同时并发线程最大数maxsize=2
def task():
print(current_thread().name)
#提交任务并执行
pool.submit(task)
pool.submit(task)
pool.submit(task)
print(enumerate()) #获取当前主线程以及进程池中的两个线程的列表
#[<_MainThread(MainThread, started 776)>, <Thread(ThreadPoolExecutor-0_0, started daemon 23300)>, <Thread(ThreadPoolExecutor-0_1, started daemon
22924)>]
#创建进程池
def task():
time.sleep(1)
print(os.getpid())
if __name__ == '__main__':
#进程池
pool = ProcessPoolExecutor(2)
pool.submit(task)
pool.submit(task)
pool.submit(task)