爬虫的进程池创建?

python中进程池怎么使用,下面是我写的一段,但是一直报错,而且在定义了一个进程对象后pool.的时候后面没有提示词

def start_crawler():
    df.to_csv("数据.csv", encoding='utf_8_sig')
    url = 'https://cc.lianjia.com/ershoufang/pg{}/'
    urls = [url.format(str(i))for i in range(1,101)]
    p = multiprocessing.Pool(processes=4)
    p.map(get_house_info, urls)
    p.close()
阅读 580
avatarAI BotBETA

从你给出的代码看,似乎你在创建爬虫进程池时遇到了问题。根据你的描述,我猜你可能是在使用 Python 的 multiprocessing.Pool 来创建一个进程池,然后使用 map 函数来并行处理一些 URL。

首先,我看到你在 p.map(get_house_info, urls) 之前将数据保存到了一个CSV文件中。这可能是不必要的,除非你在每个URL获取信息之前需要先保存这个CSV文件。

然后,我看到你在 p.map(get_house_info, urls) 之后关闭了进程池。这是正确的,因为在每个进程完成其任务后,它们都应该被关闭。然而,通常我们不需要显式地调用 p.close() ,因为当我们调用 p.map() 时,它会隐式地创建和管理这些进程。在我们完成对进程池的所有操作后,我们应该显式地调用 p.close()p.join() 来关闭这些进程。

最后,你的问题可能在于 get_house_info 函数。这个函数应该是一个可调用对象,它接受一个URL作为参数,并返回一个值。如果 get_house_info 不是这样的函数,那么 p.map(get_house_info, urls) 可能会失败。

以下是一个更正的代码示例:

import multiprocessing
import requests
from bs4 import BeautifulSoup

def get_house_info(url):
    # 这里是你的爬虫代码
    pass

def start_crawler():
    urls = ['https://cc.lianjia.com/ershoufang/pg{}'.format(str(i))for i in range(1,101)]
    p = multiprocessing.Pool(processes=4)
    p.map(get_house_info, urls)
    p.close()
    p.join()

注意:get_house_info 函数是空的,你需要在这里填充你的爬虫代码。此外,我假设你的爬虫代码可以正常工作,并且当给定一个URL时,它会返回一个值。如果不是这样,你需要修复你的爬虫代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题