作者pikachu8177 (自由之翼)
看板Python
标题[问题] 有关multiprocess的使用
时间Thu Dec 20 02:23:40 2012
各位先进好
小弟为刚开始接触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)
1F:推 ccwang002:你想要使用的应该是subprocess.Popen() 12/21 14:38
2F:→ ccwang002:抱歉搞错了, 也许你可以参考这个投影片 12/21 14:46
自己研究了一下发现应该是用不太到coroutines
同时阅读了multithread/process相关的文章
觉得应该是同时建立好几个process,例如建立10个process
然後再呼叫process1~10.start()这样
接着再用.join()防止主process完成後跳出
不晓得这样的理解方式有没有错误?
※ 编辑: pikachu8177 来自: 61.219.80.122 (12/23 16:42)