python进程池和线程池_python 之 进程池与线程池

1.什么时候用池?

池的功能是限制启动的进程数或线程数。

什么时候应该限制?

当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时

就应该用池的概念将开启的进程数或线程数限制在计算机可承受的范围内

2.同步 vs 异步

同步,异步指的是提交任务的两种方式

同步:提交完任务后就在原地等待,直到任务运行完毕后拿到任务的返回值,再继续运行下一行代码

异步:提交完任务(绑定一个回调函数)后根本就不在原地等待,直接运行下一行代码,等到任务有返回值后会自动触发回调函数。

进程池:

# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

# import os

# import time

# import random

#

# def task(n):

# print('%s run...' %os.getpid())

# time.sleep(5)

# return n**2

#

# def parse(future):

# time.sleep(1)

# res=future.result()

# print('%s 处理了 %s' %(os.getpid(),res))

#

# if __name__ == '__main__':

# pool=ProcessPoolExecutor(4)

# # pool.submit(task,1)

# # pool.submit(task,2)

# # pool.submit(task,3)

# # pool.submit(task,4)

#

# start=time.time()

# for i in range(1,5):

# future=pool.submit(task,i)

# future.add_done_callback(parse) # parse会在futrue有返回值时立刻触发,并且将future当作参数传给parse

# pool.shutdown(wait=True)

# stop=time.time()

# print('主',os.getpid(),(stop - start))

线程池:

from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

from threading import current_thread

import os

import time

import random

def task(n):

print('%s run...' %current_thread().name)

time.sleep(5)

return n**2

def parse(future):

time.sleep(1)

res=future.result()

print('%s 处理了 %s' %(current_thread().name,res))

if __name__ == '__main__':

pool=ThreadPoolExecutor(4)

start=time.time()

for i in range(1,5):

future=pool.submit(task,i)

future.add_done_callback(parse) # parse会在futrue有返回值时立刻触发,并且将future当作参数传给parse

pool.shutdown(wait=True)

stop=time.time()

print('主',current_thread().name,(stop - start))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值