concurrent模块的使用

mac2022-06-30  58

concurrent模块

进程池和线程池

池的功能限制进程数或线程数.

当需要并发的进程或线程太多,远大于操作所能承受的最大数量时,

使用线程池或进程池控制程序产生的进程数或线程数,来防止操作系统受到太大的压力从而导致服务器宕机

下面两个模块都是在concurrent文件夹中的futures文件夹下的py文件

from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor

进程池

from concurrent.futures import ProcessPoolExecutor import time def run(): print(123) time.sleep(0.5) print(234) return "我是最终结果" def call_back(future): print(future.result()) if __name__ == '__main__': pool = ProcessPoolExecutor(3) for i in range(10): future = pool.submit(run) future.add_done_callback(call_back) pool.shutdown() print("用了shutdown以后我最后在打印")

ProcessPoolExecutor

pool = ProcessPoolExecutor(n)

开启进程池,设置进程池里进程的个数为n

future = pool.submit(task,i)

将任务放到进程池中task——任务名i——任务参数future——生成的任务对象

pool.shutdown()

等待进程池中的所有任务都完成在执行代码

future.result()

获得任务的返回值注意,使用这个方法,会阻塞住线程池任务的执行,使任务都变成串行解决方案 使用列表每个任务的对象保存起来, 最后再从列表中统一取出返回值future.add_done_callback(parse) 回调函数当对象线程结束时候,会自动回调parse这个函数执行

线程池

from concurrent.futures import ThreadPoolExecutor import time def run(): print(123) time.sleep(4) print(234) def call_back(future): print(future.result()) if __name__ == '__main__': pool = ThreadPoolExecutor(3) for i in range(10): future = pool.submit(run) future.add_done_callback(call_back) pool.shutdown() print("用了shutdown以后我最后在打印")

ThreadPoolExecutor

pool = ThreadPoolExecutor(n)

开启线程池,设置线程池里线程的个数为n

future = pool.submit(task,i)

将任务放到线程池中task——任务名i——任务参数future——生成的任务对象

pool.shutdown()

等待进程池中的所有任务都完成,再执行代码

future.result()

获得任务的返回值注意,使用这个方法,会阻塞住线程池任务的执行,使任务都变成串行解决方案 使用列表每个任务的对象保存起来, 最后再从列表中统一取出返回值future.add_done_callback(parse) 回调函数当对象线程结束时候,会自动回调parse这个函数执行

同步、异步、阻塞和非阻塞

同步

就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回

异步

当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。

非阻塞

指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

XMind: ZEN - Trial Version

转载于:https://www.cnblogs.com/marklijian/p/11575226.html

相关资源:python程序中的线程操作 concurrent模块使用详解
最新回复(0)