码迷,mamicode.com
首页 > 编程语言 > 详细

python_并发编程——线程池

时间:2020-01-02 20:35:31      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:return   submit   cut   img   port   线程池   res   div   进程池   

1.线程池

import time
from concurrent.futures import ThreadPoolExecutor


def func(n):
    time.sleep(2)
    print(n)


t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
for i in range(20):
    t_pool.submit(func,i)    # 启动进程池,(执行的函数,传递的参数)

结果:每过两秒钟随机打印5个数。

import time
from concurrent.futures import ThreadPoolExecutor


def func(n):
    time.sleep(2)
    print(n)


t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
for i in range(20):
    t_pool.submit(func,i)    # 启动进程池,(执行的函数,传递的参数)
t_pool.shutdown()  # 线程池被执行完,才会执行主线程的内容。
print(主线程!)

结果:技术图片

2.取出线程池中函数的返回值

from concurrent.futures import ThreadPoolExecutor


def func(n):
    return n*n


t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
t_list = []
for i in range(20):
    # 接收进程池的返回值
    t = t_pool.submit(func,i)
    # 将返回值添加进列表
    t_list.append(t)
t_pool.shutdown()  # 线程池被执行完,才会执行主线程的内容。
print(主线程!)
for i in t_list:
    print(i.result())  # 用result方法,打印列表中的值

结果:技术图片

 

 3.进程池

  导入ProcessPoolExecutor模块,方法和线程池一样。

4.map()方法:

from concurrent.futures import ThreadPoolExecutor
import time


def func(n):
    time.sleep(2)
    print(n)


t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
t_pool.map(func,range(20))    # 启动进程池,(执行的函数,传递的参数(可迭代的))

结果:每过两秒钟随机打印5个数。map方法无法拿到函数的返回值。

5.回调函数

 

from concurrent.futures import ThreadPoolExecutor


def func(n):
    return n*n


def call_back(m):
    print(回调函数:,m.result())  # m是一个对象,需要用result方法,才能得到值


t_pool = ThreadPoolExecutor(max_workers=5)
t_pool.submit(func,5).add_done_callback(call_back)  # 回调函数(回调函数的函数名)

 

结果:技术图片

 

 

 

python_并发编程——线程池

标签:return   submit   cut   img   port   线程池   res   div   进程池   

原文地址:https://www.cnblogs.com/wangdianchao/p/12141665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!