这个怎么办啊,一点头绪也没有,而且在网上也没有搜到解决办法,就来问问各位
import re
s = "a12cd3de456www7"
numbers = re.findall(r'\d+', s)
total = sum(int(n) for n in numbers)
print(total)
不知道你这个问题是否已经解决, 如果还没有解决的话:通过对内存的分析之后,可以看到是在模型加载部分出了问题,在同个进程中,多次加载模型只会消耗内存,也会增加脚本的运行时间,因此如果在一次进程启动的时候加载一次模型,在其他任务的时候只需要调用模型就可以不用加载那么多次了。
在这里是使用单例类来实现一个进程只加载一次模型的。
简单的说 单例类的作用就是在一个进程中只会实例化一个。
直接看代码吧
def singleton(cls):
from functools import wraps
instances = {}
@wraps(cls)
def get_instance(*args, **kw):
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return get_instance
@singleton
class SingleContainer(object):
def __init__(self):
self.__model = None
self.__weight = None
def get_model(self, r_helper, redis_key):
if self.__model:
return self.__model
from tensorflow.keras.models import model_from_json
model = model_from_json(r_helper.hget(redis_key, "model"))
self.__model = model
return model
def get_weight(self, r_helper, redis_key):
if self.__weight:
return self.__weight
import cPickle
weight = cPickle.loads(r_helper.hget(redis_key, "weights"))
self.__weight = weight
return weight
model = SingleContainer().get_model(r_helper, redis_key)
weight = SingleContainer().get_weight(r_helper, redis_key)
model.set_weights(weight)
这样在每个进程中只会实例化一个模型。也就每次每个进程只需要加载一次模型即可。
看看实际内存消耗情况。
做了个对比。
第一次
可以看到第一次两边都是需要消耗内存的。但是使用单例的内存消耗明显低于直接读取redis的。
第二次
可以看到第二次的时候,使用单例模型的在加载模型的时候已经不需要消耗内存了,而普通直接读取redis还是需要消耗内存的。
第三次
可以看到第三次的情况跟第二次是一样的,使用单例模型的情况下还是不用消耗到内存。
实际上改完在线上测的时候,已经不会出现一开头那样的情况,内存是保持平稳的。