并行多线程失败,怎么弄

问题遇到的现象和发生背景

我要从网上爬取数据并写入本地文件,但是运行过程中发现并没有并行处理,而是一个一个串行运行。请问代码哪里写得不对?
我的CPU是Core i5-7400,系统是win7 64位的,用pycharm写的代码。
还有一个问题请教,就是 with Pool(processes=4) as pool 这一句,processes一般取多大的数值合适?

问题相关代码,请勿粘贴截图
from multiprocessing.pool import Pool

def updateStock_pool_per(arg_list):
    download_url = arg_list[0]
    stock_path=arg_list[1]
    stock_code=arg_list[2]
    df = pd.read_csv(download_url, encoding='gbk')  # 直接将网上的文件数据读取下来
    path = os.path.join(stock_path, stock_code + '.csv')
    df.to_csv(path, index=False, encoding='gbk') # 保存到文件
    return stock_code

def updateStock(stock_path,stock_code_list):
    arg_list = []
    for stock_code in stock_code_list:
        download_url = 'http://quotes.money.163.com/service/chddata.html?code=' + stock_code + '&start=20220719&end=20220819&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;VOTURNOVER;VATURNOVER;TCAP;MCAP' # 构造url
        list_ = [download_url, stock_path, stock_code]
        arg_list.append(list_)

        # pool 每组参数只有一个,多参数封装list中list传入
        with Pool(processes=4) as pool:  # 看你的电脑硬件能支持多少线程
            # 使用并行批量获得DataFrame的一个列表
            update_success_list = pool.map(updateStock_pool_per, arg_list)# 返回是个list
        print('*' * 50)
        update_all_count = len(stock_code_list) # 一共需要更新的股票数量
        update_success_count = len(update_success_list)

        update_fail_list = []
        for m in stock_code_list:
            if m not in update_success_list:
                update_fail_list.append(m)
        update_fail_count = len(update_fail_list)
        print('共准备更新 {} 支股票, {} 支股票增加数据, {} 支股票下载数据有错'.format(update_all_count, update_success_count, update_fail_count))
        if update_fail_list:
            print(f'下载以下股票时出错\n{update_fail_list}')

if __name__ == '__main__':
    stock_path = r'C:\Users\Administrator\Desktop\stock'
    stock_code_list = ['1002296','1002364','1000826','0600981','1000997','1000901','1300291','1300002','1002051','1300252']
    updateStock(stock_path,stock_code_list)

运行结果及报错内容

img

我想要达到的结果

请告诉我问题出在哪里,该怎样修改代码

  1. 这是多进程而不是多线程
  2. 从19行到34行,不应该在for循环体内,应该与for循环平级,否则就是在不断地创建和销毁进程池,结果啥也干不成
  3. 进程数原则上是CPU核数的整数倍,不过倒也不必受此约束,主要看计算瓶颈或IO瓶颈在哪儿

processes 一般是:电脑核心数*2

img