并发编程--线程池与进程池

核心思想

以时间换空间

进程池

进程池:一个容器,这个容器限制住你开启进程的数量,默认是os.cpu_count(),我的电脑是8核,所以能开启8个,第一次肯定只能并行的处理8个任务,只要有任务完成,进程马上就会接下一个任务。

代码实现:

from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
import os,time,random

# print(os.cpu_count())
def task(n):
    print(f"{os.getpid()} 接客")
    time.sleep(random.randint(1,3))

if __name__ == '__main__':
    p = ProcessPoolExecutor()
    for i in range(30):
        p.submit(task,1)

线程池

线程池:线程最多能执行的是进程的5倍,也就是40个

代码实现:

from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
import os,time,random

# print(os.cpu_count())
def task(n):
    print(f"{os.getpid()} 接客")
    time.sleep(random.randint(1,3))

if __name__ == '__main__':
    # p = ProcessPoolExecutor()
    # for i in range(30):
    #     p.submit(task,1)
    t = ThreadPoolExecutor()
    for i in range(200):
        t.submit(task,i)

原文地址:https://www.cnblogs.com/alex3174/p/11403107.html

时间: 2024-12-27 10:07:54

并发编程--线程池与进程池的相关文章

python并发编程(管道,事件,信号量,进程池)

管道 Conn1,conn2 = Pipe() Conn1.recv() Conn1.send() 数据接收一次就没有了 from multiprocessing import Process,Pipe def f1(conn): from_zhujincheng = conn.recv() print('子进程') print('来自主进程的消息:',from_zhujincheng) if __name__ == '__main__': conn1,conn2 = Pipe() #创建一个管

17.并发编程--线程池

并发编程线程池 合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立即执行. 第三:提高线程的可管理性.线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控.但是要做到合理的利用线程池,必须对其原理了如指掌. 1. Executor 框架简介 在 Java 5 之后,并发编程引入了一堆新的启动.调度和管理 线

python第三十七天,GIL全局解释器锁*****,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe

开启线程池和进程池

线程与进程的应用场合很多,主要处理并发与多任务.然而,当开启的线程与进程过多时,系统的开销过多会造成性能低下甚至崩溃.这时,希望出现一种方法能规定只能执行指定数量线程与进程的策略.特别是针对不知道要开启多少线程或进程,而有可能出现线程或进程过多的情况.于是,线程池与进程池出现了.python3以后增加了concurrent.futures模块,为异步执行提供了高级的接口. 线程池 concurrent.futures.ThreadPoolExecutor(max_workers=None, th

多进程 multiprocessing 多线程Threading 线程池和进程池concurrent.futures

multiprocessing.procsess 定义一个函数 def func():pass 在if __name__=="__main__":中实例化 p = process(target=子进程要执行的函数,args(函数的参数且必须以元组的方式传参)) p.start() 开启子进程 p.join() 感知子进程的结束,主进程等待子进程执行完后才退出 p.terminate() 结束一个子进程 p.is_alive() 查看某个进程是否还在运行 属性 p.name p.pid

GIL 线程池与进程池 同步与异步

1.GIL   全局解释器锁     只存在于cPython中,其他解释器中没有 释以:在cpython中它是一种互斥锁是为了防止多个线程在同一时间执行python字节码,这个锁是非常重要的,因为cpython的内存管理是非线程安全的,而且很多已经存在的代码需要依赖这个锁,所以即使它影响了程序效率也无法将其去除. 优点:保证了cpython中内存管理是线程安全的 缺点:使得多线程无法并行 注:非线程安全:多个线程访问统一个资源,会有问题: 线程安全:多个线程访问统一个资源,不会有问题,与之相反

5,线程池,进程池,协程,IO模型

今日内容: 1,线程池 2,进程池 3,协程 4,IO 模型 服务端要满足这三个条件: 1,24小时不间断的提供服务 2,能够支持高并发 3,要有固定的IP地址和端口在服务端这个地方会出现阻塞态情况: 阻塞IO 操作有: 1,链接循环 2,通信循环单线程实现高并发思路: 为了更好的提高程序的运行效率,即实现高并发,让服务端同时能够接受多个客户端的消息 所以一般在服务端会把,连接循环和通信循环封装为两个不同的函数方法, 这样当一个客户端与服务端进行通信时,服务端的连接循环可以和其他客户端进行连接,

第十五章、线程池和进程池

目录 第十五章.线程池和进程池 一.线程计时器 二.异步同步 三.线程池和进程池 第十五章.线程池和进程池 一.线程计时器 from threading import Timer,current_thread def task(x): print('%s run....' %x) print(current_thread().name) if __name__ == '__main__': t=Timer(3,task,args=(10,)) # 3s后执行该线程 t.start() print

内存池、进程池、线程池

首先介绍一个概念"池化技术 ".池化技术 一言以蔽之就是:提前保存大量的资源,以备不时之需以及重复使用. 池化技术应用广泛,如内存池,线程池,连接池等等.内存池相关的内容,建议看看Apache.Nginx等开源web服务器的内存池实现. 起因:由于在实际应用当中,分配内存.创建进程.线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作.           因此,当程序中需要频繁的进行内存申请释放,进程.线程创建销毁等操作时,通常会使用内存池.进程池.

并发编程 --- 线程补充2

目录 线程 线程 event事件 作用:用来控制线程的执行, 使用方法: Event是threading中的一个类,调用里边的一些方法对线程进行一些操作. e = Event() 在某一个线程中出现了e.wait()的时候,此时这个线程就不能执行,e.wait()可以在多个线程中. 接触e.wait()的方法是,在别的线程中使用e.set(),此时其他线程中的e.wait()的线程都可以继续运行. 例: from threading import Event from threading imp