[迎風奔雨]進程+攜程
阿新 • • 發佈:2017-10-31
ces 頁面 urn Coding read pen style 一個 pri
#-*- coding=utf-8 -*- import requests from multiprocessing import Process import gevent from gevent import monkey; monkey.patch_all() import sys reload(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‘)#讀取指定文件
[迎風奔雨]進程+攜程