我在 30 个 CPU 上并行化代码,并确认在容器外部使用 python 库“pathos”可以正常工作。
pool = ProcessPool(nodes=30)
results = pool.map(func_that_needs_to_run_in_parallel, range(30))
pool.close()
pool.join()
results_df = pd.concat(results)
但是,在 Docker 容器中将代码作为 Flask 应用程序的一部分运行时,它不起作用。我有三个容器:
- 烧瓶应用程序,
- 我用来将所有繁重的处理卸载到工作进程的redis,
- 工作进程。
worker进程的代码可以总结为:
#some code that needs to be run on only one cpu
#the above 'ProcessPool' code snippet for one particularly resource-intensive task
#some code that needs to be run on only one cpu
当我运行应用程序时,工作容器中代码的并行化部分使用的 CPU 永远不会超过 4 个。我在 docker stats 和htop
. docker-compose yaml 文件中的容器没有 cpu 使用限制。
htop
显示代码在任何时候仅在 4 个 cpu 上运行,但实际上它在任务期间随机切换使用哪个 cpu,因此工作容器可以访问所有 48 个 cpu。
摘要:使用此多处理代码运行应用程序很有帮助,但 CPU 使用率存在上限。