python初学者的小问题

这个怎么办啊,一点头绪也没有,而且在网上也没有搜到解决办法,就来问问各位

img

import re

s = "a12cd3de456www7"
numbers = re.findall(r'\d+', s)
total = sum(int(n) for n in numbers)

print(total)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7740105
  • 你也可以参考下这篇文章:Python三种方法计算皮尔逊相关系数以及实现给定数据集,返回数据集中每个特征和标签的相关系数
  • 同时,你还可以查看手册:python- 定义扩展类型:已分类主题- 终结和内存释放 中的内容
  • 除此之外, 这篇博客: Python 内存泄露问题,详细讲解如何查找问题以及解决方法中的 三、解决方法,使用单例类 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    通过对内存的分析之后,可以看到是在模型加载部分出了问题,在同个进程中,多次加载模型只会消耗内存,也会增加脚本的运行时间,因此如果在一次进程启动的时候加载一次模型,在其他任务的时候只需要调用模型就可以不用加载那么多次了。

    在这里是使用单例类来实现一个进程只加载一次模型的。

    简单的说 单例类的作用就是在一个进程中只会实例化一个。

    直接看代码吧

    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还是需要消耗内存的。

    第三次
    在这里插入图片描述
    可以看到第三次的情况跟第二次是一样的,使用单例模型的情况下还是不用消耗到内存。

    实际上改完在线上测的时候,已经不会出现一开头那样的情况,内存是保持平稳的。

  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 讲师简介,量化交易介绍及自动化交易演示小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^