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

如何在Python中并行执行多个函数并获取它们的返回值

Python 并行执行多函数并获取返回值

你的三个函数均为IO密集型操作(网络请求、浏览器交互),用线程池并行执行是最优选择——既能大幅缩短总耗时,又不会产生进程池的高开销。下面给出两种可行的实现方案:

方案一:使用 concurrent.futures.ThreadPoolExecutor

这是Python标准库中最简洁的并行实现方式,无需额外安装依赖:

from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver
import requests

def session_ID():
    # 重要:每个线程需独立初始化WebDriver,避免线程安全问题
    driver = webdriver.Chrome()
    try:
        driver.get('你的目标URL')
        sessionID = driver.execute_script('return ...')
        return sessionID
    finally:
        driver.quit()  # 确保执行完成后关闭浏览器

def reCaptcha():
    recaptcha_res = requests.get('你的reCaptcha请求URL')
    return recaptcha_res.text  # 可根据需求返回具体内容,比如recaptcha_res.json()

def hCaptcha():
    hcaptcha_res = requests.get('你的hCaptcha请求URL')
    return hcaptcha_res.text

def main():
    # 创建线程池,线程数与待执行函数数量一致即可
    with ThreadPoolExecutor(max_workers=3) as executor:
        # 提交三个函数到线程池,返回Future对象用于获取结果
        future_session = executor.submit(session_ID)
        future_recaptcha = executor.submit(reCaptcha)
        future_hcaptcha = executor.submit(hCaptcha)
        
        # 获取每个函数的返回值,result()会阻塞直到对应函数执行完成
        sessionID = future_session.result()
        recaptcha = future_recaptcha.result()
        hcaptcha = future_hcaptcha.result()
        
        print(sessionID, recaptcha, hcaptcha)

if __name__ == "__main__":
    main()

关键注意点:

  • session_ID函数中必须在函数内部初始化WebDriver,不能共用全局实例——Selenium的WebDriver不是线程安全的,共用会导致各种异常。
  • 三个result()的调用顺序不影响并行效果,因为三个函数已经在后台线程同时启动执行。

方案二:使用 multiprocessing 进程池(适用于特殊场景)

如果你的函数存在线程安全问题(比如依赖不支持多线程的老旧库),可以用进程池替代,但进程开销比线程大,IO密集场景下效率不如线程池:

from multiprocessing import Pool
from selenium import webdriver
import requests

def session_ID():
    driver = webdriver.Chrome()
    try:
        driver.get('你的目标URL')
        sessionID = driver.execute_script('return ...')
        return sessionID
    finally:
        driver.quit()

def reCaptcha():
    return requests.get('你的reCaptcha请求URL').text

def hCaptcha():
    return requests.get('你的hCaptcha请求URL').text

def main():
    with Pool(processes=3) as pool:
        # 用map批量提交任务,返回结果的顺序与任务提交顺序一致
        results = pool.map(lambda func: func(), [session_ID, reCaptcha, hCaptcha])
        sessionID, recaptcha, hcaptcha = results
        print(sessionID, recaptcha, hcaptcha)

if __name__ == "__main__":
    main()

补充说明:

  • 进程池模式下,每个进程会独立初始化Python解释器和WebDriver,内存占用更高,但完全规避了线程安全风险。
  • 若requests请求需要设置超时、代理等参数,直接在函数内部配置即可,不影响并行执行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:32:31