python分组和任务分配_如何在Python中将任务公平地分配给工人?同样大小的块

我有工人和任务要做:workers = ['peter', 'paul', 'mary']

tasks = range(13)

现在我想把任务分成几块或几批工作,这样每个工人就可以在一个批次中工作,并且与其他人做的工作量差不多。在我的现实生活中,我希望将批处理作业调度到计算场。批处理作业应该并行运行。实际的计划和调度是由商业级工具(如lsf或grid)完成的。在

一些我期望的例子:

^{pr2}$

这个问题与here,here,和{a3}非常相似

不同的是,我想要这些功能,按顺序或优先顺序排列:不使用len,如果可能的话,不要在内部建立长数据结构

接受发电机

回流发电机

尽可能多地使用stdlib组件

关于要求的一些旁注:没有故意的dicts:我有一个同名的worker可以执行多个批处理(unix主机名)。如果您的解决方案使用dicts,这很好,因为我们总是可以通过批处理枚举来执行worker查找。在

任意长度:worker和task都可以是任意长度的iterable>=1。而且它们不必像上面的例子那样平均分配,Mary只得到一个任务。在

秩序:对我来说并不重要。我想其他人可能更喜欢[0,1]、[2,3]、[5]这样的顺序,但我不在乎。如果您的解决方案能够保持或改变顺序,那么可能值得向其他人指出这一点。在

我已经试着把我的思想集中在itertools和这个特定的问题上,并想出了下面的代码来说明这个问题:from itertools import *

def distribute_work(workers, tasks):

batches = range(len(workers))

return [ ( workers[k],

[t[1] for t in i]

) for (k,i) in groupby(sorted(zip(cycle(batches),

tasks),

key=lambda t: t[0]),

lambda t: t[0]) ]

这满足4,但排序很可能违反1。。和2/3。根本没想过。在

可能有一些简单的解决方案,用我没有想到的方式组合一些stdlib组件。但也许不是。有人吗?在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值