我正在执行一些pandas
和NumPy
操作,在窗口中我可以看到CPU的所有内核都在运行,但在Linux环境中,一切都在1个内核上运行。
我想参与所有核心,因此请快速执行操作。
例如,
def a():
#some operations
.....
我只想执行一次此功能,但使用所有内核。因为当它只使用一个内核时,在 Linux 中大约需要 6 个小时,尽管在窗口中只需要 2 个小时。
我在 windows numexpr 中看到将默认内核设置为 4。
有什么方法可以从代码中在 Linux 中做同样的事情吗?
使用concurrent.future
模块进行平行执行。 它将为您完成工作:
concurrent.futures 模块为异步执行可调用对象提供了一个高级接口。
异步执行可以使用线程(使用 ThreadPoolExecutor(或单独的进程(使用 ProcessPoolExecutor(执行。两者都实现相同的接口,该接口由抽象执行器类定义。
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 内核。