簡體   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