我正在研究有关分布式处理的代码。gitHub
我要感谢eliben
这篇好文章。我已经阅读了他的解释,但有一些黑点。据我了解,该代码用于在多台机器/客户端中分配任务。我的问题是:
我最基本的问题是工作分配到不同机器的位置是什么?
为什么 main 函数中有 if else 语句?
让我以更笼统的方式开始这个问题。我认为我们通常从
Process
一个特定的块(独立内存部分)开始,而不是像这样一次传递所有块:chunksize = int(math.ceil(len(HugeList) / float(nprocs))) for i in range(nprocs): p = Process( target = myWorker, # This is my worker args=(HugeList[chunksize * i:chunksize * (i + 1)], HUGEQ) processes.append(p) p.start()
在这个简单的例子中,我们有
nprocs
进程。myWorker
每个进程都会启动一个作用于指定块的函数实例。我的问题是:
- 对于在每个块中工作的每个进程,我们有多少个线程?
现在查看
gitHub
我试图理解的代码mp_factorizer
?更具体地说,在这个函数中,我们没有块,而是一个巨大的队列(shared_job_q
)。这个巨大的队列由最大大小为 43 的子列表组成。这个队列被传递到factorizer_worker
. 通过那里get
我们获取这些子列表并将它们传递给串行工作者。我知道我们需要这个队列来在客户端之间共享数据。我的问题是:
factorizer_worker
我们是否为每个nprocs
(=8) 进程调用函数的实例?- 每个流程的哪一部分数据起作用?(一般情况下,我们有 8 个进程和 43 个块。)
- 每个进程有多少个线程?
- 是否
get
从每个进程线程调用函数?
谢谢你的时间。