在 Google Cloud Compute Engine V 上利用所有 CPU;

Utilizing all CPU on Google Cloud Compute Engine V;

我在 Google 云上购买了 Machine 类型的 e2-highmem-16(16 vCPUs,128 GB 内存),因为我需要 运行 很多计算量大的代码。

我使用 Mac 中的 ssh 并安装 python conda 和我需要的所有软件包,我可以 运行 代码。唯一的问题是代码在 VM 上比在我的计算机上慢了几乎 运行s。根据计算引擎统计,我只使用了 CPU 的 0.03%。这就是它这么慢的原因吗?如果是 我如何使用 100% CPU?

您没有附上 CODE,但是,假设您有一个主要函数为您运行所有计算并且它看起来像这样(非常通用,因此您可以传递给它通过 *args 和 **kwargs 随便你喜欢什么):

def f_execute_work(*args, **kwargs):
    .....
    .....

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

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

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

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

submit(fn, *args, **kwargs) 安排可调用函数 fn 作为 fn(*args **kwargs) 和 returns 表示执行的 Future 对象执行可调用的。

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