Multithreading 我们可以在docker中运行多进程程序吗?
我有一些使用多进程的代码,如下所示:Multithreading 我们可以在docker中运行多进程程序吗?,multithreading,docker,multiprocessing,Multithreading,Docker,Multiprocessing,我有一些使用多进程的代码,如下所示: 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.
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中处理
以下是我关注的问题:
是的,请参阅有关主管的文件 您还可以使用守护程序工具 或中六
Docker包括名称空间的进程id,并完全支持内核运行多个进程。在容器内部,您可以运行ps来查看隔离进程列表(通常只是shell和ps命令) docker用于运行单个应用程序的描述是将应用程序隔离技术与更熟悉的OS虚拟化工具分离开来,您可以在后台启动web服务器、邮件服务器、ssh守护程序等 请注意:
- 一旦pid 1退出,您的容器将结束,而不管您的分叉进程是否仍在运行
- 如果没有init,未被其父进程捕获的退出进程将保持为僵尸(它们不会通过名称空间隔离到达主机init进程)。有一个
应用程序可以作为入口点运行,以在出现问题时清除这些问题()tini
是的,在容器中运行的应用程序将扩展以使用CPU核,就像它们在容器外运行一样。
你可能需要在Docker run中指定你允许Docker容器使用多少CPU,从允许执行(0-3,0,1)的doc--cpuset cpus=”“CPU中提取谢谢。多线程似乎不是问题。但我关心的是多重处理。如果容器只是一个进程。那么我的多进程代码将如何处理呢?我不是专家,但我见过多进程docker容器通过使用supervisor作为PID1来运行来协调进程。我试着理解你的话。你是说docker支持多处理。但是这些进程是通过进程名称空间隔离的,所以我们不能在docker容器外看到它们,对吗?进程隔离意味着容器内的进程看不到主机,它们只能看到自己在运行。但是主机将能够看到容器中运行的进程docker运行-it--rm busybox/bin/sh-c top以查看此操作。这有助于隔离。但不包括CPU方面。如果单个进程容器中有100个线程,而容器中有5个进程中有20个线程,那么操作系统的调度是否会有所不同。@Prama这不是docker的问题,这是Linux操作系统的调度进程与线程的问题,容器不会改变这一点。除了添加可选的CPU利用率限制之外,调度程序的行为不会随容器而改变。