我是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)
答案 0 :(得分:1)
来自multiprocessing programming guidelines:
应尽可能避免在进程之间转移大量数据。
multiprocessing.Pool
依靠pipe
将工作分配给子进程。如果您填充了该管道,那么整个应用程序很有可能最终会挂起。
只需尝试使用imap
而不是map
。代替迭代传递文件对象,逻辑应该懒惰地读取这些行,以避免填充内部缓冲区。
答案 1 :(得分:0)
确定要调用multi()函数吗?该文件是您原始文件的简化版吗?
答案 2 :(得分:0)
我发现问题出在我的线程计数器中,仅显示1000中的444测试,但实际上所有行均正确通过,许多线程同时启动,因此为什么不将它们计为XD Daym !!!