博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 多进程+协程
阅读量:5292 次
发布时间:2019-06-14

本文共 1350 字,大约阅读时间需要 4 分钟。

#原地址:https://blog.csdn.net/lambert310/article/details/51162634 #-*- coding=utf-8 -*-import requestsfrom multiprocessing import Processimport geventfrom gevent import monkey; monkey.patch_all() import sysreload(sys)sys.setdefaultencoding('utf8')def fetch(url):    try:        s = requests.Session()        r = s.get(url,timeout=1)#在这里抓取页面    except Exception,e:        print e     return '' def process_start(url_list):    tasks = []    for url in url_list:        tasks.append(gevent.spawn(fetch,url))    gevent.joinall(tasks)#使用协程来执行 def task_start(filepath,flag = 100000):#每10W条url启动一个进程    with open(filepath,'r') as reader:#从给定的文件中读取url        url = reader.readline().strip()        url_list = []#这个list用于存放协程任务        i = 0 #计数器,记录添加了多少个url到协程队列        while url!='':            i += 1            url_list.append(url)#每次读取出url,将url添加到队列            if i == flag:#一定数量的url就启动一个进程并执行                p = Process(target=process_start,args=(url_list,))                p.start()                url_list = [] #重置url队列                i = 0 #重置计数器            url = reader.readline().strip()        if url_list not []:#若退出循环后任务队列里还有url剩余            p = Process(target=process_start,args=(url_list,))#把剩余的url全都放到最后这个进程来执行            p.start()  if __name__ == '__main__':    task_start('./testData.txt')#读取指定文件

 

转载于:https://www.cnblogs.com/wtil/p/9321774.html

你可能感兴趣的文章
第三届蓝桥杯本科预赛 c++ 第十题
查看>>
redis详解
查看>>
修改列名以及其数据类型
查看>>
实用性较强的idea插件
查看>>
鱼塘钓鱼(fishing)
查看>>
java基础篇---正则表达式
查看>>
声明提升
查看>>
关于c# .net爬虫
查看>>
Rails--render partial时传递参数
查看>>
java基础不牢固容易踩的坑
查看>>
P4824 [USACO15FEB]Censoring (Silver) 审查(银)
查看>>
实验二
查看>>
记录一些IDEA常用的快捷键和技巧 二(界面布局)
查看>>
log4j的简单应用(转载)
查看>>
iOS UILabel自定义行间距
查看>>
git命令详解(一)
查看>>
【模板】埃筛
查看>>
Nodejs初识随笔
查看>>
1019 数字黑洞 (20 分)
查看>>
参照nopCommerce框架开发(NextCMS)
查看>>