我正在研究有关分布式处理的代码。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从每个进程线程调用函数?
谢谢你的时间。