首页 > 解决方案 > 带有巨大文件循环的python3多处理dosnt加载所有行

问题描述

我是 python 新手,尝试使用多处理模块用 python 循环大文件,但我发现有大小限制,当我使用 1 个核心文件包含 8000 行时,脚本在 3000 行后停止,而 2 个核心只有 1500并带有4芯1000线

import requests
import sys
import functools
import os
import multiprocessing as mp


count= 0
start = time.time()
file_ip = "url10.txt"
file = open(file_ip, 'r')
urls = file.read().split('\n')

def multi():
p = Pool(processes=8)
result = p.map(fonction, urls)

标签: python-3.xmultiprocessing

解决方案


多处理编程指南

应尽可能避免在进程之间转移大量数据。

multiprocessing.Pool依赖于将pipe工作分配给子进程。如果你填满了那个管道,整个应用程序很有可能最终会挂起。

只需尝试使用imap而不是map. 代替文件对象的可迭代传递,逻辑应该懒惰地读取这些行,以避免填充内部缓冲区。


推荐阅读