为什么多处理性能是不可见的?

2024-07-02 12:02:53 发布

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

我看到了引用here,并尝试将该方法用于for循环,但似乎没有按预期工作。你知道吗

def concatMessage(obj_grab, content):
    for logCatcher in obj_grab:
        for key in logCatcher.dic_map:
            regex = re.compile(key)
            for j in range(len(content)):
                for m in re.finditer(regex, content[j]):
                    content[j] += "           " + logCatcher.index + "        " + logCatcher.dic_map[key]
    return content

def transferConcat(args):
    return concatMessage(*args)

if __name__ == "__name__":
    pool = Pool()
    content = pool.map(transferConcat, [(obj_grab, content)])[0]
    pool.close()
    pool.join()

我想提高for循环的性能,因为它需要22秒才能运行。你知道吗

当我直接运行这个方法时,也需要大约22秒。你知道吗

看来增强失败了。你知道吗

我应该怎么做来提高我的for-loop速度? 为什么pool.map在我的情况下不起作用?你知道吗


在纳布拉赫罗的提醒下,我修改了代码如下:

if __name__ == "__main__":
    content = input_file(target).split("\n")
    content = manager.list(content)
    for files in source:
        obj_grab.append((LogCatcher(files), content))
    pool = Pool()
    pool.map(transferConcat, obj_grab)
    pool.close()
    pool.join()

def concatMessage(LogCatcher, content):
    for key in LogCatcher.dic_map:
        regex = re.compile(key)
        for j in range(len(content)):
            for m in re.finditer(regex, content[j]):
                content[j] += LogCatcher.index + LogCatcher.dic_map[key]

def transferConcat(args):
    return concatMessage(*args)

经过长时间的等待,它导致82秒完成。。。你知道吗

为什么我会遇到这种情况?如何修改代码?你知道吗


obj\u grab是一个列表,其中包含不同文件输入的日志捕捉器 content是我想要连接的文件,使用Manager()让多进程连接到同一个文件。你知道吗


Tags: keyinreobjmapfordefcontent
1条回答
网友
1楼 · 发布于 2024-07-02 12:02:53

目标抓取和内容中有什么?我猜它只包含一个对象,所以当你启动你的池时,你只调用函数transferConcat一次,因为你在obj\u grab和content中只有一个对象。你知道吗

如果你用地图,再看看你的参考资料。为了加速程序,obj\u grab和content必须是对象列表,因为它使用不同的obj\u grab和content多次调用函数

你知道吗池.map不会加快函数本身的速度-函数只会被不同的数据并行调用多次!你知道吗

我希望这能澄清一些问题。你知道吗

相关问题 更多 >