并发编程之线程池进程池

线程池与进程池

池:表示容器。线程池就是存放线程的容器,进程池就是存放进程的容器

为什么要存放到线程池、进程池中

  1. 避免频繁的创建和销毁(进程、线程)来的资源开销
  2. 可以限制同时存在的线程数量,以保证服务器不会因为资源不足而崩溃
  3. 帮我们管理了线程的创建和销毁
  4. 管理了任务的分配

进程池:

# 进程池
from concurrent.futures import ProcessPoolExecutor
from multiprocessing import Process
import os
import time

def task():
    time.sleep(0.1)
    print(os.getpid())


if __name__ == '__main__':
    pool = ProcessPoolExecutor(3)
    # 提交任务到池子中
    pool.submit(task)
    # time.sleep(1)
    pool.submit(task)
147332
147320

线程池:

# 线程池
from concurrent.futures import ThreadPoolExecutor

from threading import  active_count,enumerate,currentThread
import os
import time

def task():
    print(currentThread().name)
# 创建线程池
pool = ThreadPoolExecutor(3)

# 提交任务到池子中
pool.submit(task)
pool.submit(task)

print(f"{enumerate()}")
print(f"{active_count()}")
ThreadPoolExecutor-0_0
ThreadPoolExecutor-0_0
[<_MainThread(MainThread, started 135020)>, <Thread(ThreadPoolExecutor-0_0, started daemon 134904)>, <Thread(ThreadPoolExecutor-0_1, started daemon 134872)>]
3

如果主进程不结束,池子里面的进程或线程,也是一直存活的

posted @ 2019-07-05 18:01  Hello_Jack  阅读(169)  评论(0编辑  收藏  举报
# 页脚html代码 /*头部导航栏*/ #navigator { font-size:15px; border-bottom: 1px solid #ededed; border-top: 1px solid #ededed; height: 60px;/*导航栏高度,原始50*/ clear: both; margin-top: 25px; } /*导航栏设置,可以自定义导航栏的目录*/ #navList { min-height: 35px; float: left; } #navList li { /*每一个栏目节点*/ float: left; margin: 0 5px 0 0; /*这里原来是0 40px 0 0 */ } #navList a { /*栏目文字的格式*/ display: block; width: 5em; height: 22px; float: left; text-align: center; padding-top: 19px; }