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模块使用详解