繁体   English   中英

在python中多处理字典

[英]Multiprocessing a dictionary in python

我有两个数据字典,我创建了一个函数,作为规则引擎来分析每个字典中的条目,并根据我设置的特定指标做事情(如果有帮助,字典中的每个条目都是图形中的节点,如果规则匹配我在它们之间创建边缘)。

这是我使用的代码(它是一个for循环,它将部分字典传递给规则函数。我将我的代码重构为我读过的教程):

jobs = []
    def loadGraph(dayCurrent, day2Previous):
        for dayCurrentCount  in graph[dayCurrent]:
            dayCurrentValue = graph[dayCurrent][dayCurrentCount]
            for day1Count  in graph[day2Previous]:
                day1Value = graph[day2Previous][day1Count]
                #rules(day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous)
            p = multiprocessing.Process(target=rules, args=(day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous))
            jobs.append(p)
            p.start()
            print ' in rules engine for day', dayCurrentCount, ' and we are about ', ((len(graph[dayCurrent])-dayCurrentCount)/float(len(graph[dayCurrent])))

我正在研究的数据可能相当大(可能,因为它是随机生成的)。 我想每天约有50,000个参赛作品。 因为大多数时间花在这个阶段,我想知道我是否可以使用我可用的8个核心来帮助更快地处理这个问题。

因为每个字典条目都与前一天的字典条目进行比较,所以我认为这些过程可能会被分开但我上面的代码比正常使用它慢。 我认为这是因为它为每个条目创建了一个新流程。

有没有办法加快速度并使用我所有的cpu? 我的问题是,我不想传递整个字典,因为那时一个核心会吮吸处理它,我宁愿让一个进程拆分到每个cpu,或者以最大化所有自由cpus的方式。

我对多处理完全陌生,所以我确信有一些我很容易丢失的东西。 任何建议/建议或阅读材料都会很棒!

我过去所做的是创建一个处理数据条目的“工人类”。 然后我将启动X个线程,每个线程运行一个worker类的副本。 数据集中的每个项目都被推送到工作线程正在观察的队列中。 当队列中没有其他项时,线程会降低。

使用这种方法,我能够在大约3秒内使用5个线程处理10,000多个数据项。 当应用程序只是单线程时,这将花费更长的时间。

查看: http//docs.python.org/library/queue.html

我建议在Python中查看MapReduce实现。 这是一个: http//www.google.com/search?sourceid = chrome&ie = UTF-8&q = mapreduce + python 另外,看一下名为Celery的python包: http//celeryproject.org/ 使用celery,您不仅可以在单台计算机上的核心之间分配计算,还可以将服务器场(集群)分配给计算机。 您通过更多涉及的设置/维护来支付这种灵活性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM