python多线程和多进程如何选择?

最近使用使用Python做IP地理库查询,想着提高效率,按照IO密集型采用多线程,CPU密集型使用多进程,初步以为查询应该是IO密集型任务,所以初步我是采用的多线程,但是跑了一天后(跑千万量级)发现速度好慢啊,于是我就做了简单的测试,我是用的机器是8核32线程的配置,测试代码与运行时间如下:

  • 采用4线程去执行,花费162秒
from multiprocessing.dummy import Pool as ThreadPool
import time
def main ():
    start = time.time()
    pool = ThreadPool(4)
    #文件读取
    pool.map(do_query, file_name)
    pool.close()
    pool.join()
    end = time.time()
    print "time:", end-start

 

  • 采用单线程,却只用了118秒

 

pool = ThreadPool(1)

所以接下来采用多进程的测试,果然采用4进程,只用了30s.

from multiprocessing import Pool as ProcessPool
import time
def main ():
    start = time.time()
    pool = ProcessPool(4)
    #文件读取
    pool.map(do_query, file_name)
    pool.close()
    pool.join()
    end = time.time()
    print "time:", end-start

后来果断将脚本改为多进程运行,这是在使用Python的时候犯得一个错误,总觉得查询是IO密集型任务,但如果使用别人封装的接口,进行大批量任务之前最好是测试一下,到底是占IO还是CPU。正确的选择线程还进程执行,才能真正的提高效率。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值