python 生產者 消費者

2022-03-09 17:48:34 字數 1368 閱讀 6329

from bs4 import beautifulsoup

import requests

import time

import multiprocessing as mp

import re

from multiprocessing import queue

# from multiprocessing import joinablequeue as queue

base_url = ''

def crawl(url):

html = requests.get(url).text

# 模擬請求時間消耗 0.1 s

time.sleep(0.1)

return html

def parse(html):

soup = beautifulsoup(html,'lxml')

all_anchors = soup.find_all('a',)

# title = soup.find('meta',)

page_urls =

main_url = soup.find('meta',)['content']

return main_url,page_urls

# print(html)

def main():

# unseen 本可以定義多個

unseen = (base_url,)

seen = ()

# 為了讓 html 爬取 與 html 解析 同步進行,所以這裡使用 生產者--消費者 模式

html_queue = queue()

# 開啟程序池

# 生產者 即 html 爬取

crawl_pool = mp.pool(2)

# 消費者 即 html 解析

parse_pool = mp.pool(2)

for url in unseen:

# 若一直 有 要被爬取的 html 則 一直進行

else:

# 已經爬取完成所有 頁面

html_queue.put(none) # 此處向佇列傳送 生產完成訊號,不然方法一直被阻塞

results =

# 開啟迴圈 消費生產出的 html,對其進行解析

while true:

html=html_queue.get()

if html:

else:

# html_queue.task_done()

break

print(results)

if __name__ == '__main__':

main()

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者消費者

using system using system.collections.generic using system.threading namespace gmservice foreach thread thread in producers q.exit console.read public...

生產者消費者

執行緒通訊 乙個執行緒完成了自己的任務時,要通知另外乙個執行緒去完成另外乙個任務.wait 等待 如果執行緒執行了wait方法,那麼該執行緒會進入等待的狀態,等待狀態下的執行緒必須要被其他執行緒呼叫notify方法才能喚醒。notify 喚醒 喚醒執行緒池等待執行緒其中的乙個。notifyall 喚...