多处理效率混乱

2024-06-17 15:03:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个利用多处理包的Python作业,问题是。当我在双核超线程笔记本电脑上运行3个处理器时,每个核心的CPU使用率都达到了100%,没有问题。我还有一个6核的超线程工作站,当我在那台机器上运行同一个脚本时,每个核心只会中断30%。有人能解释这是为什么吗?我以为是I/O,但如果是这样的话,我的笔记本电脑就不能100%使用了,对吧?你知道吗

代码如下,简要说明: MultiprocessingPoolWithState是一个定制类,它激发N个worker,并为每个worker提供一个数据帧的副本(这样df就不会在每次操作中通过线路传送给每个worker)。tups是一个元组列表,用作process\u data()执行的每个操作的切片标准。你知道吗

下面是代码示例:

import multiprocessing as mp
config = dict()
N_Workers = mp.cpu_count-1
def process_data(tup):
    global config
    df = config['df']
    id1 = tup[0]
    id2 = tup[1]
    df_want = df.loc[(df.col1 == id1) & (df.col2 == id2)]
    """ DO STUFF """
    return series_i_want

pool = MultiprocessingPoolWithState(n=N_Workers, state=df)
results = pool.map(process_data,tups)

我不确定任何人还需要什么其他细节,所以我将添加我可以添加的内容(我不能提供自定义类,因为它不是我的,而是同事的)。最主要的是我的笔记本电脑的cpu使用率最高,但我的工作站没有


Tags: 代码configdf核心datampprocess笔记本电脑
1条回答
网友
1楼 · 发布于 2024-06-17 15:03:36

对于那些可能对此感到好奇的人,我想我已经找到了答案(尽管这个答案的技术性不强)。在“DO STUFF”中,我调用statsmodels.x13.x13\u arima\u analysis(),这是一个Python包装器,用于x13 arima SEATS,这是美国人口普查局为季节性调整时间序列(如销售记录)创建的一个销售调整程序。我只有一个x13.exe的拷贝,包装器会调用它,所以在我的笔记本电脑(Windows 10)上,我认为操作系统会自动为每个进程创建.exe的拷贝,但是在我们的服务器(Windows Server 2012 R2)上,每个进程都在排队等待自己使用.exe的机会,所以在我们的服务器上,我的笔记本电脑处理了一个I/O问题自动地。解决方案很简单-为每个进程创建一个具有唯一路径的.exe,程序运行速度比以前快300倍。你知道吗

我不明白不同的操作系统如何处理多个进程看同一个.exe的问题,但这是我的理论,在添加进程相关路径时似乎得到了证实。你知道吗

相关问题 更多 >