You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas并行检测网站存活状态?

并行检测DataFrame中网站存活状态的优化方案

方案一:使用Pandarallel实现并行Apply(优先推荐)

Pandarallel是专为Pandas设计的并行化工具,直接替换原生apply即可实现多核并行,完全符合你偏好的apply类实现方式,上手简单。

步骤:

  1. 安装依赖库
pip install pandarallel
  1. 修改后的完整代码
import pandas as pd
import requests
import urllib3
from pandarallel import pandarallel

# 禁用SSL证书验证警告,避免控制台输出冗余信息
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 初始化并行模块,指定使用全部8核CPU,开启进度条便于观察
pandarallel.initialize(nb_workers=8, progress_bar=True)

# 加载网站数据到DataFrame
siteList = [['1','https://www.facebook.com'],[2,'https://www.instagram.com'], [3,'https://www.mail.com'],[4,'https://www.thegrumpyscarecrow.com/']]
df = pd.DataFrame(siteList, columns=['id','site'])

# 网站存活状态检测函数
def getStatusCode(url):
    try:
        # 使用HEAD请求仅获取响应头,比GET请求更高效,减少数据传输量
        r = requests.head(url, verify=False, timeout=5)
        return r.status_code
    except Exception:
        # 捕获所有异常(超时、连接失败等),返回-1标记网站不可达
        return -1

# 并行执行检测,替换原生apply为parallel_apply
df['status'] = df['site'].parallel_apply(getStatusCode)

print(df)

方案二:使用Multiprocessing标准库实现并行

如果不想安装第三方库,可直接用Python内置的multiprocessing模块手动实现并行处理:

import pandas as pd
import requests
import urllib3
from multiprocessing import Pool, cpu_count

# 禁用SSL证书验证警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 加载网站数据到DataFrame
siteList = [['1','https://www.facebook.com'],[2,'https://www.instagram.com'], [3,'https://www.mail.com'],[4,'https://www.thegrumpyscarecrow.com/']]
df = pd.DataFrame(siteList, columns=['id','site'])

# 网站存活状态检测函数
def getStatusCode(url):
    try:
        r = requests.head(url, verify=False, timeout=5)
        return r.status_code
    except Exception:
        return -1

if __name__ == '__main__':
    # 创建进程池,自动匹配CPU核心数(你的机器为8核)
    with Pool(cpu_count()) as pool:
        # 批量处理所有网站URL,返回结果列表后赋值给DataFrame
        status_results = pool.map(getStatusCode, df['site'].tolist())
        df['status'] = status_results

    print(df)

关键优化点说明

  • 坚持使用requests.head():仅获取响应头,避免下载页面内容,大幅提升检测速度
  • 固定5秒超时:防止单个无响应网站拖慢整体进度
  • 多核并行:8核CPU同时处理任务,100个网站的理论耗时可控制在15秒以内,完全满足30秒以内的要求

内容的提问来源于stack exchange,提问作者Dimbo1979

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:39:53