Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 我们可以在docker中运行多进程程序吗?_Multithreading_Docker_Multiprocessing - Fatal编程技术网

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
      应用程序可以作为入口点运行,以在出现问题时清除这些问题()

    您好,非常感谢您提供的信息。但我认为你的回答与我的问题不太相符。也许我确实把问题说清楚了。我重新编辑了我的问题。你能再检查一下吗?我从一个旧的Docker PR中提取这个
    是的,在容器中运行的应用程序将扩展以使用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利用率限制之外,调度程序的行为不会随容器而改变。