我正在運行一個模擬,其中包含大約1000萬個存儲在字典中的獨特dna序列。我需要處理每個序列,其中包括逐字逐句逐字逐字逐行(以前5個字母,移位索引再乘5)和 並在一個單獨的函數中處理它。這需要相當多的時間,因爲它已經設置好了,所以它在for循環中逐個遍歷每個序列。Python:使用多處理處理大塊字典
我正在尋找的是一種將字典分成大約20個塊的方法,我可以使用多處理來處理。有沒有一種更簡單的方法,而不是僅僅通過每個鍵並迭代填充20個字典?
我正在運行一個模擬,其中包含大約1000萬個存儲在字典中的獨特dna序列。我需要處理每個序列,其中包括逐字逐句逐字逐字逐行(以前5個字母,移位索引再乘5)和 並在一個單獨的函數中處理它。這需要相當多的時間,因爲它已經設置好了,所以它在for循環中逐個遍歷每個序列。Python:使用多處理處理大塊字典
我正在尋找的是一種將字典分成大約20個塊的方法,我可以使用多處理來處理。有沒有一種更簡單的方法,而不是僅僅通過每個鍵並迭代填充20個字典?
你不需要拆分字典,你所需要做的就是將鍵分成20個組,並在同一個字典上工作。我認爲這很簡單。
我認爲這也是最簡單的。我也喜歡@sihrc的方法,所以我把它和使用.keys()相結合 –
我建議使用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
注意,這是唯一的可能是高性能的POSIX系統,其中'叉()'是可用的。在Windows上,子進程的參數被醃製,這可能代表大量開銷,可能導致多處理*速度較慢*。如果性能絕對至關重要,那麼研究低級語言可能是明智的 - 或者至少考慮使用可以從Python調用的低級語言來實現工作循環。 – cdhowie
@cdhowie這將運行在基於unix的服務器上,大約有24個獨立的cpu,因此對於需要進行大量處理的開銷可以忽略不計 –