• python 多核并行计算 示例1(工作太忙,仅仅作为记录)


     1 import math
     2 import datetime
     3 import multiprocessing as mp
     4 
     5 # 调用 Python 自带的多进程库 Multiprocessing, 就可以进行 多核并行 计算
     6 
     7 # 定义目标函数
     8 def train_on_parameter(name, param):
     9     result = 0
    10     for num in param:
    11         result += math.sqrt(num * math.tanh(num) / math.log2(num) / math.log10(num))
    12     return {name: result}
    13 
    14 
    15 if __name__ == '__main__':
    16 
    17     start_t = datetime.datetime.now()
    18 
    19     # 核心数量: cpu_count() 函数可以获得计算机的核心数量。
    20     num_cores = int(mp.cpu_count())
    21     print("本计算机总共有: " + str(num_cores) + " 核心")
    22 
    23     # 进程池: Pool() 函数创建了一个进程池类,用来管理多进程的生命周期和资源分配。
    24     #        这里进程池传入的参数是核心数量,意思是最多有多少个进程可以进行并行运算。
    25     pool = mp.Pool(num_cores)
    26 
    27     param_dict = {'task1': list(range(10, 30000000)),
    28                   'task2': list(range(30000000, 60000000)),
    29                   'task3': list(range(60000000, 90000000)),
    30                   'task4': list(range(90000000, 120000000)),
    31                   'task5': list(range(120000000, 150000000)),
    32                   'task6': list(range(150000000, 180000000)),
    33                   'task7': list(range(180000000, 210000000)),
    34                   'task8': list(range(210000000, 240000000))}
    35     
    36     # 异步调度: apply_async() 是进程池的一个调度函数。第一个参数是计算函数.第二个参数是需要传入计算函数的参数,这里传入了计算函数名字和计算调参。
    37     #          异步的意义是在调度之后,虽然计算函数开始运行并且可能没有结束,异步调度都会返回一个临时结果,并且通过列表生成器临时保存在一个列表-results里。
    38     results = [pool.apply_async(train_on_parameter, args=(name, param)) for name, param in param_dict.items()]
    39     # 调度结果: 如果检查列表 results 里的类,会发现 apply_async() 返回的是 ApplyResult,也就是 调度结果类。
    40     #          简单来说,就是一个用来等待异步结果生成完毕的容器。
    41     # 获取结果: 调度结果 ApplyResult 类可以调用函数 get(), 这是一个非异步函数,
    42     #          也就是说 get() 会等待计算函数处理完毕,并且返回结果。
    43     #          这里的结果就是计算函数的 return。
    44     results = [p.get() for p in results]
    45 
    46     end_t = datetime.datetime.now()
    47     elapsed_sec = (end_t - start_t).total_seconds()
    48     print("多进程计算 共消耗: " + "{:.2f}".format(elapsed_sec) + "")
    个人学习记录
  • 相关阅读:
    Ninject之旅之十四:Ninject在ASP.NET Web Form程序上的应用(附程序下载)
    Ninject之旅之十三:Ninject在ASP.NET MVC程序上的应用(附程序下载)
    Ninject之旅之十二:Ninject在Windows Form程序上的应用(附程序下载)
    Ninject之旅之十一:Ninject动态工厂(附程序下载)
    Ninject之旅之十:Ninject自定义提供者
    Ninject之旅之九:Ninject上下文绑定(附程序下载)
    Ninject之旅之八:Ninject插件模型(附程序下载)
    linq语句的顺序查询,查询结果不同
    layui 的使用 table 和后端数据交互
    获取post的参数
  • 原文地址:https://www.cnblogs.com/jeshy/p/15234079.html
Copyright © 2020-2023  润新知