巨大文件循环的python3多处理加载所有行

时间:2018-07-19 13:35:54

标签: python-3.x multiprocessing

我是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)

3 个答案:

答案 0 :(得分:1)

来自multiprocessing programming guidelines

  

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

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

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

答案 1 :(得分:0)

确定要调用multi()函数吗?该文件是您原始文件的简化版吗?

答案 2 :(得分:0)

我发现问题出在我的线程计数器中,仅显示1000中的444测试,但实际上所有行均正确通过,许多线程同时启动,因此为什么不将它们计为XD Daym !!!