2025年3月13日 星期四 甲辰(龙)年 月十二 夜 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 多进程计算示例

时间:07-22来源:作者:点击数:29

Python 多进程计算示例

  • import logging
  • from multiprocessing import Pool
  • import time
  • import pandas as pd
  • # 计算注册买单时间 (时间较长,推荐分割数据后用多进程进行计算)
  • bins = [0,1,15,30,45,60,75,90,105,120,135,150,165,180,360]
  • start = time.time()
  • def df_mp(df, row_start, row_end):
  • """多进程函数"""
  • # 分拆数据
  • df_sub = df[row_start : row_end]
  • df_sub = df_sub[df_sub['JoinTime'] < '2021-01-01']
  • # 计算注册买单时间
  • df_sub['tranTime'] = df_sub.apply(lambda x: x['FirstPaymentTime'] - x['JoinTime'], axis=1)
  • del df_sub['FirstPaymentTime']
  • df_sub['tranTime'] = df_sub['tranTime'].apply(lambda x: x.days)
  • df_sub.fillna(181.0, inplace=True)
  • df_sub['tranTime'] = df_sub['tranTime'] + 1
  • df_sub['tranTime_bin'] = pd.cut(df_sub['tranTime'], bins)
  • return df_sub
  • if __name__ == '__main__':
  • pool = Pool()
  • batch_uids = 500000 # 每个数据自己的数量
  • batchs = int(len(allData2) / batch_uids) + 1
  • res_l = []
  • for i in range(batchs):
  • m = i * batch_uids # 切片始
  • n = (i + 1) * batch_uids # 切片终
  • res = pool.apply_async(df_mp, args=(allData2, m, n,)) # 此处不能用get方法,会阻塞进程池
  • res_l.append(res)
  • print("==============================>")
  • pool.close()
  • pool.join() #调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程>结束
  • df = res_l[0].get()
  • for res in res_l[1:]:
  • df = df.append(res.get())
  • logger.info("all done. cost: %3f 秒" % (time.time() - start))

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门