Python多进程一进程占用大量内存

2024-04-24 07:08:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试爬过多个网页并收集数据。你知道吗

pool = multiprocessing.Pool(4, maxtasksperchild=1000)
ret = pool.map(get_data_for_somthing, some_list) #ret not useful

每个进程依次创建更多线程(使用线程API) 例如,如果web页面上有分页,那么将创建线程来同时访问每个页面(url)。你知道吗

所有进程都收集数据并转储到csv中(使用pandas)。单个CSV文件的大小不超过500KB。你知道吗

try:
    dt = get_data_from_wb1(id, start=start, end=end)
    nsdf = get_data_from_wb2(id, start=start, end=end)
    if not nsdf.empty:
        nsdf.drop("Label", axis=1, inplace=True)
        nsdf.insert(0, "some_label", nsdf.index)
        nsdf.insert(0, "id", id)
        nsdf.columns = dbcols
        nsdf["label_new"] = dt["label_new"]
        nsedf.to_csv(path + variable + ".csv")
    else:
        raise Exception("returned null")
except Exception as e:
    logger_map.get(multiprocessing.current_process().name, setup_logger()).error(variable+ " : " + vriable2 + " : " + str(e.args[0]))

上面的代码显示了每个进程所做的事情,并且在“getdata”函数中创建了更多的线程。你知道吗

我有i7四核的视窗。 那么我应该生成3个进程还是4个进程?作为一个主要的过程。你知道吗

主要问题:其中一个派生进程占用巨大内存(5GB),而其他进程占用大约100-200MB。为什么会这样?你知道吗

我不能把代码放在这里,所以请不要否决这个问题。但是有人能告诉我为什么一个进程占用这么多内存吗?你知道吗


Tags: csv数据idmapdataget进程线程
1条回答
网友
1楼 · 发布于 2024-04-24 07:08:25

您必须使工作进程产生一些调试输出才能回答您的问题。你知道吗

例如,使用logging模块记录线程的启动和完成时间、找到的URL数量、处理URL所需的时间。结果可能会让你有更多的问题。你知道吗

可能有些页面包含指向自身的链接,将程序发送到一个无限循环中。你知道吗

相关问题 更多 >