我有一些使用多进程的代码,如下所示:
import multiprocessing
from multiprocessing import Pool
pool = Pool(processes=100)
result = []
for job in job_list:
result.append(
pool.apply_async(
handle_job, (job)
)
)
pool.close()
pool.join()
这个程序正在对非常大的数据集进行大量计算。因此,我们需要多个流程来同时处理工作以提高性能。
我被告知,对于托管系统,一个docker容器只是一个进程。所以我想知道如何在Docker中处理我的多进程?
以下是我的担忧:
由于容器只是一个过程,我的多进程代码会在此过程中变成多线程吗?
性能会下降吗?因为我使用多进程的原因是同时完成工作以获得更好的性能。
答案 0 :(得分:5)
Docker包含命名空间的进程ID,并完全支持内核运行多个进程。在容器内部,您可以运行ps来查看隔离的进程列表(通常只是您的shell和ps命令)。
运行单个应用程序的docker的描述是将应用程序隔离技术与您在后台启动Web服务器,邮件服务器,ssh守护程序等更熟悉的操作系统虚拟化工具分开。
请注意几点:
tini
应用程序作为清理这些应用程序的入口点。答案 1 :(得分:0)
是的,请参阅有关主管的文档 https://docs.docker.com/engine/admin/using_supervisord/
您还可以使用守护程序工具 http://cr.yp.to/daemontools.html