1

我正在执行一些操作pandasNumPy在 Windows 中我可以看到 CPU 的所有内核都在运行,但在 Linux 环境中,一切都在1 core上运行。

我想参与所有核心,以便快速执行操作。

例如,

def a():
    #some operations
    ..... 

我只想执行一次此功能,但使用所有核心。因为当它只使用一个内核时,它在 Linux 中大约需要 6 个小时,尽管在窗口中只需要 2 个小时。

我在 Windows numexpr 中看到将默认核心设置为 4。

有什么方法可以让我在 Linux 中通过代码做同样的事情吗?

4

1 回答 1

0

使用concurrent.future模块并行执行。它将为您完成工作:

concurrent.futures 模块为异步执行可调用对象提供了高级接口。

可以使用线程执行异步执行,使用 ThreadPoolExecutor 或单独的进程,使用 ProcessPoolExecutor。两者都实现了相同的接口,该接口由抽象 Executor 类定义。

import concurrent.futures
with ThreadPoolExecutor(max_workers=psutil.cpu_count()) as executor:
    future = executor.submit(a(), args)
    print(future.result())

submit(fn, *args, **kwargs) 将可调用对象 fn 安排为执行fn(*args **kwargs)并返回表示可调用对象执行的 Future 对象。

使用psutil.cpu_count()获取用于调度最大工作人员和利用 cpu 核心的逻辑核心数。

于 2020-07-04T21:06:54.040 回答