【问题标题】:Throttling based on keys in python基于python中的键的节流
【发布时间】:2018-10-27 20:39:58
【问题描述】:

我想知道是否有办法在纯 python 中限制事件。 例如,通常其他工具有办法查看特定事件,例如:

{"id":111,"message":"hello","host":"example"}

并且可能在某个时间间隔之后或之内发生另一个事件,如下所示:

 {"id":112,"message":"hello","host":"example"}

鉴于这两个事件,您通常可以查看事件中的 2 个键,因此对于此示例,message 键和 host 键具有相同的值两个事件。因为这两个事件具有相同的键和值,所以您可以将它们视为一个。这就是我想要“节流”的方式。

我想知道在 python 中是否有一种好方法可以做到这一点,我正在考虑使用数据库/redis,但不确定最好的方法是什么。对于事件,id 是唯一的。

谢谢!

编辑:我实际上已经完成了这是 Logstash,但我正在寻找一种在纯 python 中完成它的方法。

【问题讨论】:

    标签: python throttling


    【解决方案1】:

    这样的事情怎么样?我假设这些是您正在查看的字典(这就是它们的样子)。

    首先,让keys 成为您要查找的一组键。假设 DE 是您正在查看的事件。

    found = False
    for k in keys:
        if D[k] == E[k]:
            keys2 = copy(keys)
            keys2.remove(k)
            for l in keys2:
                if D[l] == E[l]:
                    found = True
                    break
        if found: break
    

    可能有更好的“Python 方式”来执行此操作,但已经有一段时间了,我没有时间查找它。至少这适用于我尝试过的示例。

    编辑:请注意,如果您只有想要查找的这两个键,则可以丢弃 keys 和循环,直接测试它们。

    【讨论】:

    • 嗯,有趣,并且随着时间的推移存储结果?例如,5 分钟?我猜想为匹配的事件添加一个新的 id,然后将其添加到字典中并查找任何可能匹配的未来事件?
    • 如果您不关心 id 但想按某些特征过滤(这听起来像),您可以 remove the id 和任何其他您不想要的键,转换dictionarytuple,然后将剩余的内容添加到集合 S。在这种情况下,添加到集合中会自动“限制”重复数据。如果您想保留所有数据,您可以将唯一项目存储在第二个列表或集合中,仅当 S 不包含您想要的内容 (contains()) 时才添加到第二个集合中。
    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多