我對python相當陌生,正在製作一個腳本,允許將其他程序的點雲數據導入Autodesk Maya。我的腳本運行良好,但我想要做的是讓它更快。我有一個循環遍歷編號文件的列表。即datafile001.txt,datafile002.txt等。我想知道的是,是否有辦法讓它一次執行多個,可能使用線程或隊列?下面我的代碼我一直在努力:Python - 使用線程或隊列遍歷調用函數的for循環
def threadedFuntion(args):
if len(sourceFiles) > 3:
for count, item in enumerate(sourceFiles):
t1=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber1], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t1.start()
t2=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber2], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t2.start()
t3=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber3], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t3.start()
t4=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber4], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t4.start()
這顯然是有很多原因不能正常工作,首先它只是將創建4個線程,我希望能夠給一個選項,更或更少。其次它錯誤,因爲它試圖重用一個線程?就像我說的,我對python很陌生,而且頭腦微微一點,我在這裏看過幾篇文章,但無法讓其工作得很好。我認爲隊列可能是我需要的東西,但無法弄清楚,我嘗試了條件語句和加入語句,但再次無法得到我想要的。
我想更具體什麼我想實現的是,該函數是通過文本文件讀取,檢索coords,然後將它們導出爲二進制文件供maya讀取。這些文本文件中的一個具有5-10百萬個x,y,z座標,這很常見,這需要相當長的時間。大約需要30分鐘 - 1小時的時間在一臺漂亮的獸人電腦上做1個文件,任務管理器說python只使用12%的處理器和大約1%的RAM,所以如果我可以同時做多個這樣的文件,更多文件的速度要快很多。我不認爲多線程/排隊for循環很難,但我已經迷路了,並且嘗試了一週左右的失敗解決方案。
謝謝大家的幫助,我真的很感激,並認爲這個網站是驚人的。這是我的第一篇文章,但我覺得我只是從閱讀這裏完全學會了Python。
如果您的任務是IO綁定的(程序花費大部分時間等待磁盤中的數據),那麼添加競爭光盤訪問的線程將無助於提高性能。如果任務是CPU限制的(程序處理數據的速度比磁盤能夠提供的速度慢),那麼在您的情況下,如果您有多個CPU,則可以使用多處理模塊來處理不同進程中的文件。@ CaptainMurthy的例子應該像現在一樣工作,如果你刪除'線程'名稱並使用'從多處理導入進程,鎖'代替 – jfs