python-3.x - 为什么进程在多处理中需要不同的时间来执行?
问题描述
我正在运行一个使用多处理处理 3 laks 行数据帧的程序。我使用在 python 中使用 multiprocess.process 创建的 62 个进程在 64 个核心 VM 上执行此操作。每个进程输入 4900 行。
奇怪的是,过程需要不同的时间来完成。第一个进程在 15 分钟内完成了任务,而最后一个进程花费了 70 多分钟。下面是我使用的多处理代码块。
import multiprocessing
# define dataframe here
data_thread = data
uid = "final" ### make sure to change uid
batch_size = 4900
counter = 0
datalen = len(data_thread)
Flag = True
processes = []
while(Flag):
start = counter*batch_size
end = min(datalen, start+batch_size)
if end>=datalen:
Flag = False
indices.append((start, end))
data_split = data_thread.iloc[start:end]
threadName = "process_"+str(counter)
processes.append(multiprocessing.Process(target=process, args = (data_split, uid, threadName, start, end, )))
counter = counter+1
startCount = 0
while(startCount<len(processes)):
t = processes[startCount]
try:
t.start()
except:
print("Error encountered while starting the process_%lf: %s"%(startCount, str(indices[startCount])))
print("Started: process_" + str(startCount))
startCount = startCount + 1
endCount = 0
while(endCount<len(processes)):
t = processes[endCount]
t.join()
print("Joined: process_" + str(endCount))
endCount = endCount + 1
解决方案
推荐阅读
- android - Android ONVIF - 尝试从 ONVIF IP 摄像机检索配置文件时出现内部服务器错误
- java - 在 MySQL 中使用印度数字分隔符格式化货币金额
- android-databinding - 如何在 Android 数据绑定中传递空参数
- c# - 箭头键导致 WPF 游戏出现巨大延迟
- c - C 中的 FORWARD_NULL 与 UNINIT 覆盖率错误
- c# - 如何使用 Union 组合两个 linq 查询
- javascript - GoogleMaps API 在 html 文件中工作,但不在 JS 文件中
- hyperledger-fabric - 如何使用 Hyperledger Composer 将对等节点添加到现有的正在运行的 Hyperledger Fabric 区块链?
- trigonometry - quanteda textstat_simil 可以处理多少规模
- ajax - 通过 HTTP/2 在 ajax 中显示自定义错误消息