python多进程数组映射

构造映射函数:func,在func中显式提取参数,再调用multi_map方法

from multiprocessing.pool import Pool
import random


def split_jobs(jobs, num_works):
    size = len(jobs) // num_works
    jobs_list = [jobs[i * size:(i + 1) * size] for i in range(num_works)]
    for i, e in enumerate(jobs[num_works * size:]):
        jobs_list[i].append(e)
    return jobs_list


def multi_map(func, jobs, num_works, **kwargs):
    jobs = [(i, e) for i, e in enumerate(jobs)]  # idx tag
    random.shuffle(jobs)  # work balance
    jobs_list = split_jobs(jobs, num_works)

    pool = Pool(num_works)
    receive = []
    for i, sub_jobs in enumerate(jobs_list):
        receive.append(pool.apply_async(func=func, args=(sub_jobs, kwargs,)))
    pool.close()
    pool.join()

    result = [(i, e) for sub_res in receive for i, e in sub_res.get()]
    result = sorted(result, key=lambda x: x[0])  # sorted by idx
    result = [e for i, e in result]
    return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值