为什么Python多处理调用未指定的代码



我正试图对我的网络抓取项目实现多处理,以便一次抓取200页的列表10页,而不是一次抓取1页。

我的问题是,在实现代码时,应该调用列表上的函数的东西会导致一个大故障,它会调用被调用函数之外的输入语句。

以下是显示问题的整个示例脚本:

#print statements to request necessary details to perform scrape
cleanURL = input("What is the URL? ")
pn = input("What is the product name? ")
condition = input("Is the product used or new? ").lower()
pages_available = input('How many pages of data do you want? ')
def scrape_page(URL):
#variables for storing/cleaning data for mysql queries
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'}
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')

#creates a list of 200 urls
url_list = []
for pages_unscraped in range(int(pages_available)+1):
URL = cleanURL + str(pages_unscraped)
if (pages_unscraped > 0):
url_list.append(URL)
#supposed to call the scrape_page function on the entire url_list
if __name__=='__main__':
p = Pool(10)
p.map(scrape_page, url_list)
p.terminate()
p.join()

出现的问题是,它调用输入语句10次,而不是一次只对列表中的10个url调用"scrape_page"函数。

如何阻止编程导致此问题?

您需要将所有的"单次执行"代码(如input语句(放在if __name__=='__main__':保护作用域中,或者放在一个单独的函数中,该函数将从该保护中调用,从而只保证一次执行。

Python在运行多处理时所做的最终是运行一个新的解释器(是的,有一些平台差异可以让你在可分叉的系统上摆脱它,但为了简单起见…(,使用包含要调用的函数的Python脚本,然后调用该函数。在Python有机会调用所需函数之前,该脚本全局范围内的任何内容都将被执行。

相关内容

  • 没有找到相关文章

最新更新