文档章节

Python中利用Threadpool.map()多线程抓数据

 流苏_Amoy
发布于 2015/09/08 11:54
字数 422
阅读 289
收藏 1

趁着手头暂时没有活,跟着python教程学习了一下,同时试用了一下map的多线程。

发现map的并行返回的结果是一个list,而且和iteratelist的顺序一致。:)

环境为python3.3+Pydev

import urllib.request as request
import collections
from multiprocessing import pool
from multiprocessing.dummy import Pool as ThreadPool
import urllib.request
import threading
import time


def __get__citycode(province_no):
    #====从上述url中读取城市信息
    url_prv =  'http://m.weather.com.cn/data5/city.xml' #province数据
    url_cty  = "http://m.weather.com.cn/data3/city%s.xml"#city数据
    content = request.urlopen(url_prv).read()

   #============================================================================
   #  #由于byte和string在python3中的差异性,需要加上b,
   #以解决'str' does not support the buffer interface问题
   #  province = content.split(b",")
   #  #利用容器,迅速获得列表的每一个元素,之后解码
   #  content2 = collections.Counter(province)
   #  for d in content2:
   #      d = d.decode("utf-8")
   #      print (d)
   #
   # # print (province)
   #============================================================================
    content = content.decode("utf-8")
    province = content.split(",")[province_no]
    partial_result= ''
    #print(provinces)
    p_code = province.split("|")[0]#取得省份编码
    url_cty_new = url_cty % p_code
    print (url_cty_new)
    content2 = request.urlopen(url_cty_new,None,5).read()#timeout设置为5秒
    content2 = content2.decode("utf-8")
    cites = content2.split(",")
    for c in cites:
        c_code = c.split("|")[0]#取得城市编码
        url_town = url_cty % c_code
        content3 = request.urlopen(url_town,None,5).read()#timeout设置为5秒
        content3 = content3.decode("utf-8")
        towns = content3.split(",")
        for t in towns:
            t_code = '101'+t.split("|")[0] #取得城镇编码,101为中国编码抬头
            #===============================================================
            # t_code = t.split("|")[0] #取得城镇编码
            #===============================================================
            #print(t_code)
            t_name = t.split("|")[1]#取得城市名称
            #===============================================================
            # url_4 = url_cty % t_code
            # content4 = request.urlopen(url_4).read()
            # content4 = content4.decode("utf-8")
            # print(content4)
            # code = content4.split("|")[1]
            # line = " '%s': '%s',\n" % (t_name, code)
            # result +=line
            # print (t_name+':'+code)
            #===============================================================
            line = " '%s': '%s',\n" % (t_name, t_code)
            partial_result +=line
            #print (t_name+':'+t_code)
    time.sleep(1)#休息一下
    return partial_result
if __name__ == '__main__':
    result = 'city = {\n'
    prv = []
    for i in range(34):
        prv.append(i)
    pool = ThreadPool(4)
    sum_result = pool.map(__get__citycode,prv)
    pool.close()
    pool.join()
    for i in range(prv.__len__()):
        result += sum_result[i]
    result +="}"
    #print (result)

    
    
    url_save = r"C:\Users\user\Desktop\python练习\tt.txt"
    f = open(url_save,"w")
    f.write(result)
    print("Finish")
    f.close()


© 著作权归作者所有

粉丝 0
博文 2
码字总数 1328
作品 0
朝阳
私信 提问
python GIL与伪多线程

https://blog.csdn.net/B9Q8e64lO6mm/article/details/81031283 为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用...

ka_ko
2018/09/22
0
0
为什么有人说 Python 多线程是鸡肋?

为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋? ...

刘志军
2018/05/04
0
0
(转载)Python进阶:聊聊IO密集型任务、计算密集型任务,以及多线程、多进程 - 笑虎的文章 - 知乎

Python进阶:聊聊IO密集型任务、计算密集型任务,以及多线程、多进程 - 笑虎的文章 - 知乎 https://zhuanlan.zhihu.com/p/24283040 Python进阶:聊聊IO密集型任务、计算密集型任务,以及多线...

avatus
2018/09/05
0
0
python高性能编程--002--全局解释器锁GIL

一、GIL基本概念 1.GIL即为gloabl interpreter lock,全局解释器锁。这个东西是在python解释器之一的cpython中引入的一个概念,因为我们现在常用的python解释器就是cpython这个解释器,故而G...

Ryan_snow
2018/06/26
0
0
Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据

这个方法抓下来的网页,得不到相册图片,新浪要js动态生成图片,解决方法可以是:1. 本地用webkit跑抓下来的js;2.抓移动版微博的静态相册。 但都暂时未实现,欢迎回帖好方法,以下是转文。 ...

Honghe
2012/12/09
4.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
8
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
9
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
7
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部