python分布式库_python标准库中从多处理到分布式处理

只有在多台计算机上实际运行脚本时,才会向多台计算机分发。第一次运行脚本(不带client选项)时,它会在承载共享作业/结果队列的特定IP/端口上启动Manager服务器。除了启动Manager服务器外,runserver还将通过调用mp_factorzer充当工作进程。它还负责从结果队列收集结果并进行处理。您可以自行运行此脚本并获得完整的结果。在

但是,您也可以通过使用client选项在其他机器上运行脚本,将分解工作分发给其他机器。这将调用runclient,它将连接到您最初运行脚本时启动的现有管理器服务器。这意味着客户机正在访问runserver使用的相同共享队列,因此它们都可以从相同的队列中提取工作并将结果放入相同的队列。在

上述内容应涵盖问题1和2。在

我不太清楚你在问题3中问的是什么。我想您可能想知道为什么我们不显式地将列表的一个块传递给每个工人(就像您所包含的示例中一样),而不是将所有的块放入一个队列中。答案是因为runserver方法不知道实际将有多少工人。它知道它将启动8个工人。但是,它不想将HugeList分成8个块并发送到它正在创建的8个进程,因为它希望支持远程客户端连接到Manager并执行工作。因此,它为每个块选择一个任意大小的块(43),并将该列表分成与消耗整个HugeList所需大小相同的块,并将其放入Queue。下面是runserver中的代码:chunksize = 43

for i in range(0, len(nums), chunksize):

#print 'putting chunk %s:%s in job Q' % (i, i + chunksize)

shared_job_q.put(nums[i:i + chunksize]) # Adds a 43-item chunk to the shared queue.

{{{3}你可以从一个cd9}返回一个进程,作为cd9}的结果。在Do we call an instance of the factorizer_worker function for each of the nprocs(=8) processes?

是的Which part of the data each process work? (Generally, we have 8 processes and 43 chunks.)

我们没有43块。我们有X个块,每个块大小43。处理并处理每个工作进程的块。它得到哪一部分是任意的,取决于有多少工人以及每个工人的速度。在How many threads exist for each process?

一个。如果您的意思是现在脚本的每个实例都存在许多工作进程,那么服务器进程中有8个工作进程,每个客户端进程中有4个。在Does get function called from each process thread?

不知道你这是什么意思。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值