我有這個網路刮刀,它可以刮掉 4 種不同金屬的價格。提到的運行時間大約為 12 秒多處理與否。這段代碼不應該大致同時運行該函式 4 次,并且大約減少 75% 的運行時間嗎?我的處理器有 4 個內核和 4 個執行緒,如果這與它有關的話。
def scraper(url,metal):
global aluPriser
global zinkPriser
global messingPriser
global kobberPriser
global tal
url.status_code
url.headers
c = url.content
soup = BeautifulSoup(c, "html.parser")
samples = soup.find_all("td",style="text-align:center;white-space:nowrap;border-left:solid black 1px")
for a in samples:
for b in a:
if b.startswith("$"):
b = b.replace(" ","")
b = b.replace("$","")
b = int(b)
tal.append(b)
我使用以下多處理代碼運行此代碼:
if __name__ == '__main__':
url = "https://www.alumeco.dk/viden-og-teknik/metalpriser/aluminiumpriser?s=0"
url = requests.get(url)
whatDate(url)
p1 = Process(target=scraper(url,"alu"))
p1.start()
url = "https://www.alumeco.dk/viden-og-teknik/metalpriser/kobber?s=0"
url = requests.get(url)
p2 = Process(target=scraper(url,"kobber"))
p2.start()
url = "https://www.alumeco.dk/viden-og-teknik/metalpriser/metal-priser-mp58?s=0"
url = requests.get(url)
p3 = Process(target=scraper(url,"messing"))
p3.start()
url = "https://www.alumeco.dk/viden-og-teknik/metalpriser/zink?s=0"
url = requests.get(url)
p4 = Process(target=scraper(url,"zink"))
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
uj5u.com熱心網友回復:
要從此處的并行化中獲得任何真正的好處,您需要將 移動requests.get()到scraper函式中。幾乎所有的時間都花在了網路請求上;如果幾乎沒有時間花在它上面,并行化 CPU-bound 位并不重要。
也就是說,對于這項特定作業來說,這也是multiprocessing錯誤的工具:您支付的序列化/反序列化成本比您從沒有 GIL 爭用中獲得的收益要多。改為使用。threading
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442010.html
