python出現(xiàn)RuntimeError錯誤問題及解決
下面是出現(xiàn)的錯誤解釋
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
下面是出現(xiàn)錯誤代碼的原代碼
import multiprocessing as mp import time from urllib.request import urlopen,urljoin from bs4 import BeautifulSoup import re base_url = "https://morvanzhou.github.io/" #crawl爬取網(wǎng)頁 def crawl(url): response = urlopen(url) time.sleep(0.1) return response.read().decode() #parse解析網(wǎng)頁 def parse(html): soup = BeautifulSoup(html,'html.parser') urls = soup.find_all('a',{"href":re.compile('^/.+?/$')}) title = soup.find('h1').get_text().strip() page_urls = set([urljoin(base_url,url['href'])for url in urls]) url = soup.find('meta',{'property':"og:url"})['content'] return title,page_urls,url unseen = set([base_url]) seen = set() restricted_crawl = True pool = mp.Pool(4) count, t1 = 1, time.time() while len(unseen) != 0: # still get some url to visit if restricted_crawl and len(seen) > 20: break print('\nDistributed Crawling...') crawl_jobs = [pool.apply_async(crawl, args=(url,)) for url in unseen] htmls = [j.get() for j in crawl_jobs] # request connection print('\nDistributed Parsing...') parse_jobs = [pool.apply_async(parse, args=(html,)) for html in htmls] results = [j.get() for j in parse_jobs] # parse html print('\nAnalysing...') seen.update(unseen) # seen the crawled unseen.clear() # nothing unseen for title, page_urls, url in results: print(count, title, url) count += 1 unseen.update(page_urls - seen) # get new url to crawl print('Total time: %.1f s' % (time.time()-t1)) # 16 s !!!
這是修改后的正確代碼
import multiprocessing as mp import time from urllib.request import urlopen,urljoin from bs4 import BeautifulSoup import re ? base_url = "https://morvanzhou.github.io/" ? #crawl爬取網(wǎng)頁 def crawl(url): ? ? response = urlopen(url) ? ? time.sleep(0.1) ? ? return response.read().decode() ? #parse解析網(wǎng)頁 def parse(html): ? ? soup = BeautifulSoup(html,'html.parser') ? ? urls = soup.find_all('a',{"href":re.compile('^/.+?/$')}) ? ? title = soup.find('h1').get_text().strip() ? ? page_urls = set([urljoin(base_url,url['href'])for url in urls]) ? ? url = soup.find('meta',{'property':"og:url"})['content'] ? ? return title,page_urls,url ? def main(): ? ? unseen = set([base_url]) ? ? seen = set() ? ? restricted_crawl = True ? ? ? pool = mp.Pool(4) ? ? count, t1 = 1, time.time() ? ? while len(unseen) != 0: ? ? ? ? ? ? ? ? # still get some url to visit ? ? ? ? if restricted_crawl and len(seen) > 20: ? ? ? ? ? ? ? ? break ? ? ? ? print('\nDistributed Crawling...') ? ? ? ? crawl_jobs = [pool.apply_async(crawl, args=(url,)) for url in unseen] ? ? ? ? htmls = [j.get() for j in crawl_jobs] ? ? ?# request connection ? ? ? ? ? print('\nDistributed Parsing...') ? ? ? ? parse_jobs = [pool.apply_async(parse, args=(html,)) for html in htmls] ? ? ? ? results = [j.get() for j in parse_jobs] ? ?# parse html ? ? ? ? ? print('\nAnalysing...') ? ? ? ? seen.update(unseen) ? ? ? ? # seen the crawled ? ? ? ? unseen.clear() ? ? ? ? ? ? ?# nothing unseen ? ? ? ? ? for title, page_urls, url in results: ? ? ? ? ? ? print(count, title, url) ? ? ? ? ? ? count += 1 ? ? ? ? ? ? unseen.update(page_urls - seen) ? ? # get new url to crawl ? ? print('Total time: %.1f s' % (time.time()-t1)) ? ?# 16 s !!! ? ? if __name__ == '__main__': ? ? main()
綜上可知,就是把你的運行代碼整合成一個函數(shù),然后加入
if __name__ == '__main__': ? ? main()
這行代碼即可解決這個問題。
python報錯:RuntimeError
python報錯:RuntimeError:fails to pass a sanity check due to a bug in the windows runtime這種類型的錯誤
這種錯誤原因
1.當(dāng)前的python與numpy版本之間有什么問題,比如我自己用的python3.9與numpy1.19.4會導(dǎo)致這種報錯。
2.numpy1.19.4與當(dāng)前很多python版本都有問題。
解決辦法
在File->Settings->Project:pycharmProjects->Project Interpreter下將numpy版本降下來就好了。
1.打開interpreter,如下圖:
2.雙擊numpy修改其版本:
3.勾選才能修改版本,將需要的低版本導(dǎo)入即可:
弄完了之后,重新運行就好。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python基礎(chǔ)入門學(xué)習(xí)筆記(Python環(huán)境搭建)
這篇文章主要介紹了python基礎(chǔ)入門學(xué)習(xí)筆記,這是開啟學(xué)習(xí)python基礎(chǔ)知識的第一篇,夯實Python基礎(chǔ),才能走的更遠,感興趣的小伙伴們可以參考一下2016-01-01python實現(xiàn)JAVA源代碼從ANSI到UTF-8的批量轉(zhuǎn)換方法
這篇文章主要介紹了python實現(xiàn)JAVA源代碼從ANSI到UTF-8的批量轉(zhuǎn)換方法,涉及Python針對文件操作與編碼轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-08-08Java?超詳細講解核心類Spring?JdbcTemplate
JdbcTemplate?JdbcTemplate是Spring?JDBC核心包(core)中的核心類,它可以通過配置文件、注解、Java?配置類等形式獲取數(shù)據(jù)庫的相關(guān)信息,實現(xiàn)了對JDBC開發(fā)過程中的驅(qū)動加載、連接的開啟和關(guān)閉、SQL語句的創(chuàng)建與執(zhí)行、異常處理、事務(wù)處理、數(shù)據(jù)類型轉(zhuǎn)換等操作的封裝2022-04-04