在 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 核心的逻辑核心数。
我在 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 核心的逻辑核心数。