[問題] 有關multiprocess的使用

看板Python作者 (自由之翼)時間13年前 (2012/12/20 02:23), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
各位先進好 小弟為剛開始接觸python的新手 因為目前在使用python撰寫呼叫androguard來對apk檔進行分析的程式 主要是要分析指定資料夾路徑底下中所有的檔案 例如./apk/00、./apk/01.......底下有很多子資料夾就不再贅述 因為裡面檔案大小不一,導致程式在分析的時候會極度耗時 所以我想應該要使用multiprocess 例如我開5個process,裡面的路徑指定./apk/01~05 這樣就可以用原來1/5的時間同時分析5個資料夾 我的程式如下: def analyze(folderpath): 省略 if __name__ == "__main__": aStart = time.time() pool = multiprocessing.Pool(processes=4) for URL in URLs: pool.apply_async(analyze, (URL, )) print '..............................' pool.close() pool.join() aStop = time.time() analyze_time = (aStop - aStart) print 'ANALYZE APK ALL COMPLETE' print '總共分析時間 =' + str(analyze_time) 我自己用一個分析需要正好1分鐘的檔案分別放在4個不同的資料夾來測試 URLs為存放'./apks/01','./apks/02'...的陣列 正常來說應該要4個同時進行 也就是說花費時間總共為60秒 但是我每次測所得出的時間仍然是60*4 =240秒 想請教這樣的寫法是否正確? 或是哪邊有問題呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.222.163 ※ 編輯: pikachu8177 來自: 61.230.77.146 (12/21 01:10) ※ 編輯: pikachu8177 來自: 61.230.77.146 (12/21 01:10)

12/21 14:38, , 1F
你想要使用的應該是subprocess.Popen()
12/21 14:38, 1F

12/21 14:46, , 2F
抱歉搞錯了, 也許你可以參考這個投影片
12/21 14:46, 2F

12/21 14:46, , 3F
自己研究了一下發現應該是用不太到coroutines 同時閱讀了multithread/process相關的文章 覺得應該是同時建立好幾個process,例如建立10個process 然後再呼叫process1~10.start()這樣 接著再用.join()防止主process完成後跳出 不曉得這樣的理解方式有沒有錯誤? ※ 編輯: pikachu8177 來自: 61.219.80.122 (12/23 16:42)
文章代碼(AID): #1GqWOke7 (Python)
文章代碼(AID): #1GqWOke7 (Python)