1. 程式人生 > >python爬蟲學習筆記--python多程序

python爬蟲學習筆記--python多程序

使用multiprocessing模組建立多程序:
import os
from multiprocessing import Process

#子程序要執行的程式碼
def run_proc(name):
    print('Child process %s (%s)Running...' %(name,os.getpid()))
    
if __name__=='__main__':
    print('Parent poecess %s.' % os.getpid())
    for i in range(5):
        p=Process(target=run_proc,args=(str(i),))
        print('Process will start.')
        p.start()
    p.join()
    print('Process end.')

執行效果:


使用multiprocessing模組中的Pool類代表程序池物件:

    Pool可以提供指定數量的程序供使用者呼叫,預設大小是CPU的核數。

from multiprocessing import Pool
import os,time,random

def run_task(name): 
    print('Task %s (pid=%s) is running...' % (name,os.getpid())) 
    time.sleep(random.random()*3) 
    print('Task %s end.' % name)
	
	
if __name__=='__main__': 
    print('Current process %s.' % os.getpid()) 
    p=Pool(processes=3)#指定建立程序池大小為3,用p=Pool()則程序池大小為CPU核數 
    for i in range(5): 
        p.apply_async(run_task,args=(i,)) 
    print('Wating for all subprocess done...') 
    p.close() 
    p.join() 
    print('All subprocesses done.')


執行效果:

程序間通訊:

Queue通訊方式

from multiprocessing import Process,Queue
import os,time,random

#寫資料程序執行的程式碼
def proc_write(q,urls):
    print('Process(%s) is writing...' % os.getpid())
    for url in urls:
        q.put(url)
        print('Put %s to queue...' % url)
        time.sleep(random.random())
        
#讀資料程序執行的程式碼
def proc_read(q):
    print('Process (%s) is reading...' % os.getpid())
    while True:
        url=q.get(True)
        print('Get %s from queue.' % url)

if __name__=='__main__':
    #父程序建立Queue,並傳給各個子程序
    q=Queue()
    proc_writer1=Process(target=proc_write,args=(q,['url_1','url_2','url_3']))
    proc_writer2=Process(target=proc_write,args=(q,['url_4','url_5','url_6']))
    proc_reader=Process(target=proc_read,args=(q,))
    #啟動子程序proc_writer寫入
    proc_writer1.start()
    proc_writer2.start()
    #啟動子程序proc_read讀取:
    proc_reader.start()
    #等待proc_writer結束:
    proc_writer1.join()
    proc_writer2.join()
    #proc_read程序裡是死迴圈,無法等待其結束,只能強行終止
    proc_reader.terminate()

執行效果:


相關推薦

python爬蟲學習筆記--python程序

使用multiprocessing模組建立多程序:import os from multiprocessing import Process #子程序要執行的程式碼 def run_proc(name): print('Child process %s (%s)Ru

Python爬蟲學習筆記——Python基礎

Python爬蟲學習筆記——Python基礎 1 IO程式設計 1.1 檔案讀寫 Python內建了讀寫檔案的函式,語法為: open(name[.mode[.buffering]]) #開啟檔案 f = open(r'C:\text\myTextFile.txt') #讀取

python爬蟲入門八:多程序/執行緒 python佇列Queue Python多執行緒(2)——執行緒同步機制 python學習筆記——多程序中共享記憶體Value & Array python多程序 Python多程序 Python 使用multiprocessing 特別耗記

什麼是多執行緒/多程序 引用蟲師的解釋: 計算機程式只不過是磁碟中可執行的,二進位制(或其它型別)的資料。它們只有在被讀取到記憶體中,被作業系統呼叫的時候才開始它們的生命期。 程序(有時被稱為重量級程序)是程式的一次執行。每個程序都有自己的地址空間,記憶體,資料棧以及其它記錄其執行軌跡的輔助資料

Python爬蟲學習筆記10】線程中的生產者消費者模式

其中 因此 問題 共享 and 生產者消費者模式 共享問題 由於 接下來 在多線程編程中,最經典的模式是生產者消費者模式。其中,生產者是專門用來生產數據的線程,它把數據存放在一個中間變量中;而消費者則從這個中間變量取出數據進行消費。由於生產者和消費者共享中間變量,這些變量大

Python學習筆記程序

multiprocessing  --程序庫 Linux上可以用fwork,但是windowns不支援fwork,所以才需要用 multiprocessing垮平臺來使用多程序 父程序:當前執行的程序叫父程序 子程序:當前執行的程序中建立的程序叫子程序 引入程序模組 for

python學習筆記程序

多執行緒即使執行緒再多也無法利用多核CPU。因此要實現計算機效能的全部效能,就要使用多程序。 python內建了多程序的第三方庫multiprocessing multiprocessing支援子程序、通訊和共享資料、執行不同形式的同步,提供了Process、Queue、P

Python爬蟲學習筆記之微信宮格驗證碼的識別(存在問題)

依次 返回結果 ptc 接下來 clas 軌跡 self top http 本節我們將介紹新浪微博宮格驗證碼的識別。微博宮格驗證碼是一種新型交互式驗證碼,每個宮格之間會有一條 指示連線,指示了應該的滑動軌跡。我們要按照滑動軌跡依次從起始宮格滑動到終止宮格,才可以完成驗證,

Python爬蟲學習筆記之模擬登陸並爬去GitHub

過程 eight res 開發者工具 @value clas 之前 自己 8.0 (1)環境準備: 請確保已經安裝了requests和lxml庫 (2)分析登陸過程: 首先要分析登陸的過程,需要探究後臺的登陸請求是怎樣發送的,登陸之後又有怎樣的

Python爬蟲學習筆記(一)——urllib庫的使用

scheme param https ade 網站 dmgr nor 分享圖片 out 前言 我買了崔慶才的《Python3網絡爬蟲開發實戰》,趁著短學期,準備系統地學習下網絡爬蟲。在學習這本書的同時,通過博客摘錄並總結知識點,同時也督促自己每日學習。本書第一章是開發環境的

Python爬蟲學習筆記(二)——requests庫的使用

pip 安裝 .text rep 瀏覽器 ror clas ade 學習筆記 準備工作 requests庫不是python自帶的庫,可以用pip安裝。在使用時導入requests即可。 基本用法 GET請求 r = requests.get(url) print(r.tex

Python爬蟲學習筆記(三)——正則表達式

斜杠 這一 seh 爬蟲 class 學習 常用方法 部分 介紹 介紹 正則表達式是一種處理字符串的強大工具,能實現字符串的檢索、替換、匹配驗證等。在爬蟲中,正則表達式主要用於從HTML裏提取所需要的信息 常用的匹配規則 模式 描述 \w 匹配字母、數字及下劃

Python爬蟲學習筆記(七)——智高考數據爬取

pid items bubuko strong eai res har href name 介紹 智高考是一個高考誌願網站,也是基於Ajax的。高中的時候我在wyz大神的幫忙下,嘗試過爬取信息來為填誌願做準備。但是當時沒有系統學習過爬蟲,幾乎都是靠大神帶飛,因此今天再次嘗試

Python爬蟲學習筆記2】urllib庫的基本使用

代理服務 cor proc 技術 origin car windows tpc -c urllib庫是python內置的實現HTTP請求的基本庫,通過它可以模擬瀏覽器的行為,向指定的服務器發送一個請求,並保存服務器返回的數據。 urlopen函數 函數原型:urlopen(

Python爬蟲學習筆記8-2】MongoDB數據庫操作詳解

參考資料 adding ocl 切換 username 詳解 top .com min 上一篇學習筆記8-1中介紹了MySQL和MongoDB的安裝、啟動和配置,本節我們接著學習有關MongoDB的一些概念、基本操作和在python中的使用。 MongoDB常用概念 為更好

Python爬蟲學習筆記總結(一)

〇. python 基礎 先放上python 3 的官方文件:https://docs.python.org/3/ (看文件是個好習慣) 關於python 3 基礎語法方面的東西,網上有很多,大家可以自行查詢. 一. 最簡單的爬取程式 爬取百度首頁原始碼:  

python爬蟲學習筆記一:爬蟲學習概覽與Requests庫的安裝與使用

python網路爬蟲與資訊提取 學習目錄: the website is the API Requests:自動爬取HTML頁面自動網路請求提交 robots.txt:網路爬蟲排除標準 Beautiful Soup:解析HTML頁面 正則表示式詳解,提取頁面關鍵資訊Re

python爬蟲學習筆記-urllib的使用

學習爬蟲,最基本的操作即為模擬瀏覽器向伺服器發出請求,python內建了一個名為urllib的內建HTTP請求庫,有了它,我們只需要關心請求的連結是什麼,需要傳遞什麼引數,以及設定請求頭等其他資訊即可。這樣,我們就不用深入底層的連線具體是怎樣傳輸和通訊(當然,這是站在巨人的肩膀上)。urll

python爬蟲學習筆記-requests用法

python內建的urllib在某些高階應用時存在很多不方便的地方且功能似乎也沒有想象的那麼強大,於是更為強大第三方庫requests庫應運而生,有了它,cookies,代理,登陸操作都是簡化很多。 首先確認安裝requests庫: pip install requests 1.類

python爬蟲學習筆記二:Requests庫詳解及HTTP協議

Requests庫的安裝:https://mp.csdn.net/postedit/83715574 r=requests.get(url,params=None,**kwargs) 這個r是Response物件 url :擬獲取頁面的url連結 params:url中的額外引數

python爬蟲學習筆記三:圖片爬取

圖片爬取的程式碼 r.content 檔案的二進位制格式 Python引入了with語句來自動幫我們呼叫close()方法: open(path, ‘-模式-‘,encoding=’UTF-8’)  w:以寫方式開啟, a:以追加模式開啟 (從 EOF 開始, 必要時建