我看到了引用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()让多进程连接到同一个文件。你知道吗
目标抓取和内容中有什么?我猜它只包含一个对象,所以当你启动你的池时,你只调用函数transferConcat一次,因为你在obj\u grab和content中只有一个对象。你知道吗
如果你用地图,再看看你的参考资料。为了加速程序,obj\u grab和content必须是对象列表,因为它使用不同的obj\u grab和content多次调用函数
你知道吗池.map不会加快函数本身的速度-函数只会被不同的数据并行调用多次!你知道吗
我希望这能澄清一些问题。你知道吗
相关问题 更多 >
编程相关推荐