如何使用dict

时间:2019-04-02 11:55:07

标签: python python-3.x python-3.5 python-multiprocessing

我从文件列表和包含命令的字典开始。

现在我有了一个辅助函数,该函数将一批文件作为列表作为第一个参数,将字典作为第二个参数,并返回一个新的字典。

我真的不知道如何使它现在可以在多处理中以一种方式工作,即工作程序函数并行运行x次,其中x是PC的CPU计数,并且如果完成,则立即启动新进程。文件列表已经不是“空”了。

commandsdict也需要输入批号,还是我应该将其作为第三个arg传递?

尽管在过程返回时能够用它做些事会很好,但是最后将所有字典(在一个列表中?)全部收起来是没有问题的。

它是用于Linux的,运行的Python 3.5是我在Process Class上尝试过的,但未能使其正常工作,(我对编程还是很陌生,所以我可能看不到简单的解决方案:D),并且对于池类,我不知道如何通过突变的批号传递dict。

fileslist[1,2,3,4,5,6,7,8,9]
batchsize = 3
commanddict = {"BatchNumberStr": {"job{:05d}/".format(batchnumber): str}, {"command1": {value, type(value)}, etc}

(工作人员使用此批号创建一个文件夹,依此类推) 稍后,我会额外存储安全检查值的类型,我知道这可能不是最好的方法,但现在对我有用:D

现在我想像这样的CPU拥有尽可能多的工人

numjobs = len(fileslist) / batchsize
if int(numjobs) != numjobs:
    numjobs = int(numjobs) +1 
else:
    numjobs = int(numjobs)
for i in range(numjobs):
    use = []
    for i in range(batchsize):
        try:
            use.append(fileslist.pop(0))
        except IndexError:
            break
    commanddict.update({"BatchNumberStr": {"job{:05d}/".format(i): str}}
    process = worker(deepcopy(use), deepcopy(commanddict))
    process.start()
    result = process.get()

process.join()

这只是从头开始 如何限制流程并在完成后加入新闻?如果有人可以帮助我做到这一点,如果游泳池更好,我将非常感激:)

更新: 我的解决方案现在是:

def poolfeeder(allfileslist, workdict):
    a = 0
    numfiles = (list(x for x in workdict["NumberofFilesPerBatch"]))[0]
    status = True
    while status is True:
        filestouse = []
        for x in range(numfiles):
            try:
                filestouse.append(allfileslist.pop(0))
            except IndexError:
                status = False
                break
        a = a + 1
        workdict.update({"BatchNumberStr": {"job{:05d}/".format(a): str}})
        if len(filestouse) > 0:
            yield [deepcopy(filestouse), deepcopy(workdict)]
        else:
            return

def worker(listinput):
    filelist = listinput[0]
    commanddict = listinput[1]
    do stuff
    return result


poolfeed = poolfeeder(allfileslist, dict)
with mp.Pool(processes=numcpus) as p:
    reslist = [p.apply_async(worker, (r,)) for r in poolfeed]
    for result in reslist:
        print(result.get())

这是个好方法吗?

如果一个工作进程遇到RunTimeError,是否将其保存为结果或使所有进程中断?如果不是,如果其中一个工作进程遇到RunTimeError,如何提高SystemExit?

0 个答案:

没有答案