小编Tre*_*ley的帖子

如何在垃圾收集时确保Python"零"内存?

我遇到了与bytesPython3.2 相关的内存管理问题.在某些情况下,ob_sval缓冲区似乎包含我无法解释的内存.

对于特定的安全应用程序,我需要能够确保内存"归零"并在不再使用后尽快返回给操作系统.由于重新编译Python实际上不是一个选项,我正在编写一个可以与LD_PRELOAD一起使用的模块:

  • 通过更换禁用内存池PyObject_MallocPyMem_Malloc,PyObject_ReallocPyMem_Realloc,并PyObject_FreePyMem_Free(例如:你会得到什么,如果你没有编译WITH_PYMALLOC).我不在乎记忆是否合并,但这似乎是最简单的方法.
  • 包装malloc,realloc以及free跟踪请求的内存量以及发布时的memset所有内容0.

粗略地看一下,这种方法似乎很有效:

>>> from ctypes import string_at
>>> from sys import getsizeof
>>> from binascii import hexlify
>>> a = b"Hello, World!"; addr = id(a); size = getsizeof(a)
>>> print(string_at(addr, size))
b'\x01\x00\x00\x00\xd4j\xb2x\r\x00\x00\x00<J\xf6\x0eHello, World!\x00'
>>> del a
>>> print(string_at(addr, size))
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00'
Run Code Online (Sandbox Code Playgroud)

最后的错误\x13是奇怪的,但不是来自我的原始值,所以起初我认为它没关系.我很快找到了不太好的例子:

>>> a = …
Run Code Online (Sandbox Code Playgroud)

python memory memory-pool

14
推荐指数
2
解决办法
1013
查看次数

Android 服务有办法检测设备何时锁定吗?

我有一个 Android 服务,我希望在设备锁定时执行操作。

我想澄清一下:

  • 我对屏幕开/关状态不感兴趣。
  • 我知道如何使用带有 Intent.ACTION_USER_PRESENT 和 KeyguardManager.inKeyguardRestrictedInputMode 的 BroadcastReceiver 来检查设备何时解锁。
  • 我对需要不断检查锁定状态的解决方案不感兴趣。
  • 我不想自己锁定或解锁设备。
  • 我不能依赖前台的 Activity 来处理 onResume。

我添加这些要点是因为我发现无数人提出同样的问题并得到其中之一的答复。我很高兴他们这样做了,因为答案是有用的和/或有教育意义的,但它们不是我现在正在寻找的。

android

4
推荐指数
1
解决办法
4247
查看次数

有没有办法将 COUNTIF 和 FILTER 结合起来?

我有一些数据看起来有点像这样:

爱丽丝 鲍勃 卡拉 戴夫
角色 角色1 角色1 角色2 *角色2(
活动1 活动2 活动3 活动1
二月 活动2 活动1 活动1 活动3
三月 活动1 活动3 活动2 活动2

Role1我想计算某人正在做的次数Activity1

我可以用来Filter获取匹配的数组,并且可以用来COUNTIF过滤范围内的值,但似乎COUNTIF只支持范围,而不支持数组

我也知道你可以做类似的事情,=COUNT(IF(FILTER($B:$Z, $B2:$Z2="Role1")="Activity1", 1, ""))但这会给我“Excel耗尽资源”错误,即使是小范围

是否有与COUNTIF数组相同的方法或其他方式来组合它们?

我怀疑我将被迫使用宏,但这似乎有点矫枉过正

excel excel-formula

4
推荐指数
1
解决办法
3万
查看次数

使用装饰方法和__del__定义的Python类不会收集垃圾:如何解开装饰方法?

我遇到了Python3.2的问题.如果一个类从父类中修饰一个函数并且还有一个析构函数,那么该类的实例永远不会被垃圾收集.

这是一些说明问题的示例代码:

def super_simple_decorator(func):
    def f(*args, **kwds):
        return func(*args, **kwds)
    return f

class Parent():
    def foo(self):
        pass

class Child(Parent):
    def __del__(self):
        print('In Child.__del__')
    def __init__(self):
        self.foo = super_simple_decorator(self.foo)

x = Child()
del x

import gc
_ = gc.collect()
print(gc.garbage)
Run Code Online (Sandbox Code Playgroud)

如果你是如此倾向,你也可以在运行时在装饰器中进行猴子补丁并看到同样的事情:

class Garbage():
    def foo(self):
        pass
    def __del__(self):
        print('In Garbage.__del__')

g=Garbage()
g.foo = super_simple_decorator(g.foo)
del g
Run Code Online (Sandbox Code Playgroud)

在每种情况下,都有未收集的垃圾,大概是因为self在装饰方法中存在绑定引用.

此时升级到Python3.4对我来说并不是一个真正的选择,所以我正在寻找一种让像这样的对象得到垃圾回收的方法.

python garbage-collection decorator python-decorators

2
推荐指数
1
解决办法
315
查看次数