我正在嘗試啓動可變數量的線程來計算我的自動交易模塊之一的函數結果。我有大約14個函數,所有這些函數在計算上都很昂貴。我一直按順序計算每個函數,但大約需要3分鐘才能完成,而且我的平臺頻率很高,我需要將計算時間縮短到1分鐘或更短。Python的多功能多線程與線程。線程? (可變線程數)
我讀過多處理和多線程,但我找不到適合我需求的解決方案。
我想要做的是定義「n」個線程使用,然後將我的函數列表劃分爲「n」個組,然後在單獨的線程中計算每組函數。基本上:
functionList = [func1,func2,func3,func4]
outputList = [func1out,func2out,func3out,func4out]
argsList = [func1args,func2args,func3args,func4args]
# number of threads
n = 3
functionSplit = np.array_split(np.array(functionList),n)
outputSplit = np.array_split(np.array(outputList),n)
argSplit = np.array_split(np.array(argsList),n)
現在我想開始「n」單獨的線程,每個線程根據拆分列表處理功能。然後,我想根據outputList
命名每個函數的輸出,併爲每個函數的輸出創建一個主碼。然後我將遍歷輸出字典並根據每列中的信息創建一個帶有列ID號的數據框(已經有了這部分工作,只需要多線程)。
有沒有辦法做到這樣的事情?我一直在研究創建threading.Thread
類的子類並將函數,輸出名稱和參數傳遞給run()
方法,但我不知道如何命名和輸出每個線程的函數結果!我也不知道如何根據相應的參數在列表中調用函數!
我這樣做的原因是爲了發現計算效率和時間之間最佳的線程數量平衡。就像我說的,這將被整合到我正在開發的高頻交易平臺中,時間是我的主要限制!
任何想法?
如果你的函數是CPU限制的,那麼忘記多線程並查看多處理(至少對於CPython)。 – Bakuriu
我現在意識到多處理是要走的路。任何有關如何使用'threading'中的'process'模塊執行此操作的指針? – denbjornen505
'threading'是錯誤的模塊。使用'multiprocessing'。 'Pool.map'就是你想要的。 – Tyler