python多线程的问题如何处理?
巴扎黑
巴扎黑 2017-04-18 09:24:54
0
5
386

想实现一个抓取图片url,然后下载图片到本地去爬虫。想利用多线程的方法增加速度, 注:在不用多线程的情况下代码能够正确抓取URL。同时也能够把图片下载到指定文件夹

以下是代码,求解看一下哪个地方不正确,给予指正:

巴扎黑
巴扎黑

全部回复 (5)
巴扎黑

你的方法我没用过, 不做置评. 我一般是这样解决的:

#!/usr/bin/env python from multiprocessing.dummy import Pool, cpu_count def get_url(): img_url = ["i am a img url list"] return img_url def save_img(url): """do some saving""" pass def main(): img_urls = get_url() pool = Pool(cpu_count()) pool.map(save_img, img_urls) pool.close() pool.join() if __name__ == "__main__": main()
    刘奇

    gcondition.wait这个操作是需要gcondition.notify来唤醒的。
    再来看你这个场景:gcondition.wait这个操作是需要gcondition.notify来唤醒的。
    再来看你这个场景:

    wait的时候挂起来了,可这个时候geturlimgurl里面又塞了很多url,然后saveimg收到通知,继续执行。

    请问:这个时候的i

    wait的时候挂起来了,可这个时候 geturlimgurl里面又塞了很多url,然后 saveimg收到通知,继续执行。##
    ##请问:这个时候的 i是个啥?##
      洪涛

      python的多线程并不能真正的加快速度吧。 建议你用多进程(楼上的)或者gevent。爬虫网络下载是io密集型的。 了解一下gevent,速度快到飞起来。

        迷茫

        雷雷

          PHPzhong

          最起码的,你主线程没有 join,主线程运行完就退出了,然后就出问题了。
          其次,imgurl 并没有完全被锁保护起来,for 循环里对 imgurl 的读是在锁外面的,会导致竞态。

            最新下载
            更多>
            网站特效
            网站源码
            网站素材
            前端模板
            关于我们 免责声明 Sitemap
            PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!