栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

线程池与进程池技术并行执行

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程池与进程池技术并行执行

构造线程池 线程池与进程池
from multiprocessing.dummy import Pool
executor = Pool(10)  # 构造线程池
executor.map()
executor.apply_async()

from concurrent.futures import ThreadPoolExecutor
threadPool = ThreadPoolExecutor(max_workers=10)
threadPool.submit()

from multiprocessing.pool import Pool
executor = Pool(200)  # 构造进程池
executor.apply_async()

from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor(max_workers=5) as pool:
	pool.map()
进程池技术创建任务列表
def all_precept(self):  # 获取所有方案 返回值[接口1,……,接口n]
        result = Publie().read_hive_planid(rq)
        port_list = []
        pool = Pool(200)
        res = []
        for program_list in result:
            res.append(pool.apply_async(self.load_plan, args=(program_list,)))
        pool.close()
        pool.join()
        for i in res:
            i.wait()
        for r in res:
            port_list.append(r.get())
        return port_list

    def load_plan(self, program_list):
        render_id = program_list[1]
        basic_id = program_list[0]
        str1 = 'http://offline.decoration.api.realsee.com/vr/display/detail.json?type=decoration&basic_id='
        str2 = '&render_id='
        str1 += str(basic_id)
        str2 += str(render_id)
        url = str1 + str2
        data = requests.get(url=url).text
        new_data = json.loads(data)
        try:

            floorplan = new_data["data"]["decoration"]['file_map']['floorplan.json']
            config = new_data["data"]["decoration"]['file_map']['config.json']
            if floorplan == True and config == True:
                floorplan_url = new_data["data"]["decoration"]['prefix_path'] + 'floorplan.json'
                config_url = new_data["data"]["decoration"]['prefix_path'] + 'config.json'
                floorplan_json = requests.get(url=floorplan_url).text
                config_json = requests.get(url=config_url).text
                planid = basic_id
                workid = program_list[2]
                taskid = program_list[3]
                my_list = [planid, floorplan_json, config_json, workid, taskid]  # 每套方案的floorplan,config
                return my_list
        except Exception as e:
            # print('方案报错信息:' + f"33[31m{e}33[0m".format(e))  # 标注为红色
            pass
构造任务列表
def all_precept(self):  # 获取所有方案 返回值[接口1,……,接口n]
        result = Publie().read_hive_planid(rq)
        port_list = []
        for program_list in result:
            render_id = program_list[1]
            basic_id = program_list[0]
            str1 = 'http://offline.decoration.api.realsee.com/vr/display/detail.json?type=decoration&basic_id='
            str2 = '&render_id='
            str1 += str(basic_id)
            str2 += str(render_id)
            url = str1 + str2
            data = requests.get(url=url).text
            new_data = json.loads(data)
            try:

                floorplan = new_data["data"]["decoration"]['file_map']['floorplan.json']
                config = new_data["data"]["decoration"]['file_map']['config.json']
                if floorplan == True and config == True:
                    floorplan_url = new_data["data"]["decoration"]['prefix_path'] + 'floorplan.json'
                    config_url = new_data["data"]["decoration"]['prefix_path'] + 'config.json'
                    floorplan_json = requests.get(url=floorplan_url).text
                    config_json = requests.get(url=config_url).text
                    planid = basic_id
                    workid = program_list[2]
                    taskid = program_list[3]
                    my_list = [planid,floorplan_json,config_json,workid,taskid]    # 每套方案的floorplan,config
                    port_list.append(my_list)
            except Exception as e:
                # print('方案报错信息:' + f"33[31m{e}33[0m".format(e))  # 标注为红色
                pass
        return port_list
多线程一定比单线程快吗?

多线程存在上下文切换

上下文切换:

多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。

概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换会这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号