Python多线程获取网页数据为何速度提升不上去呢?
阿神
阿神 2017-04-17 11:55:37
[Python讨论组]

Python代码如下

# -*- coding: utf-8 -*-
import urllib2,urllib
import threading     #多线程模块
import time, random
import sys
from bs4 import *
class MyThread(threading.Thread):
    def __init__( self, url ):
        threading.Thread.__init__( self )        
        self.url  = url

    '''vertual function in Thread'''
    def run( self ):
        try:
            urllib.urlcleanup()    #清除使用urlopen后产生的缓存文件
            req = urllib2.Request(self.url)
            response = urllib2.urlopen(req,None)     #3秒超时
            html = response.read()
            soup = BeautifulSoup(html)
            print str(self.url) + ">>>" + str(soup.title) + "\n"
        except:
            print "run函数出错..."

#main函数入口
if __name__ == "__main__":
    tasks = []
    #创建线程对象
    for i in range(0,100):
        task = MyThread( "http://www.baidu.com" )
        tasks.append( task )

    # 启动所有的线程
    for t in tasks:
        t.start()

    # 主线程中等待所有子线程退出
    for t in tasks:
        t.join()

获取百度首页标题100次所花费的时间:

注:刚接触Python多线程机制,不知道使用上有没有错误,以上代码该怎样修改才能进一步提升速度呢?

阿神
阿神

闭关修行中......

全部回复(1)
巴扎黑

首先python的线程由于GIL的限制 效率不会特别高,为了效率可以考虑多进程或线程进程混合。其次 100个线程有点多,开销大也会造成效率低,可以采用线程池来执行批量任务。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号