2013-08-02 95 views
2

我正在運行一個模擬,其中包含大約1000萬個存儲在字典中的獨特dna序列。我需要處理每個序列,其中包括逐字逐句逐字逐字逐行(以前5個字母,移位索引再乘5)和 並在一個單獨的函數中處理它。這需要相當多的時間,因爲它已經設置好了,所以它在for循環中逐個遍歷每個序列。Python:使用多處理處理大塊字典

我正在尋找的是一種將字典分成大約20個塊的方法,我可以使用多處理來處理。有沒有一種更簡單的方法,而不是僅僅通過每個鍵並迭代填充20個字典?

+0

注意,這是唯一的可能是高性能的POSIX系統,其中'叉()'是可用的。在Windows上,子進程的參數被醃製,這可能代表大量開銷,可能導致多處理*速度較慢*。如果性能絕對至關重要,那麼研究低級語言可能是明智的 - 或者至少考慮使用可以從Python調用的低級語言來實現工作循環。 – cdhowie

+0

@cdhowie這將運行在基於unix的服務器上,大約有24個獨立的cpu,因此對於需要進行大量處理的開銷可以忽略不計 –

回答

0

你不需要拆分字典,你所需要做的就是將鍵分成20個組,並在同一個字典上工作。我認爲這很簡單。

+0

我認爲這也是最簡單的。我也喜歡@sihrc的方法,所以我把它和使用.keys()相結合 –

1

我建議使用itertools.groupby,這是itertools的工作。文檔here

def grouper(n, iterable, fillvalue=None): 
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return izip_longest(fillvalue=fillvalue, *args) 

所有你需要做的就是指定區塊的數目或你的情況,n = 5