我遇到了与bytesPython3.2 相关的内存管理问题.在某些情况下,ob_sval缓冲区似乎包含我无法解释的内存.
对于特定的安全应用程序,我需要能够确保内存"归零"并在不再使用后尽快返回给操作系统.由于重新编译Python实际上不是一个选项,我正在编写一个可以与LD_PRELOAD一起使用的模块:
PyObject_Malloc用PyMem_Malloc,PyObject_Realloc用PyMem_Realloc,并PyObject_Free用PyMem_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) 我有一个 Android 服务,我希望在设备锁定时执行操作。
我想澄清一下:
我添加这些要点是因为我发现无数人提出同样的问题并得到其中之一的答复。我很高兴他们这样做了,因为答案是有用的和/或有教育意义的,但它们不是我现在正在寻找的。
我有一些数据看起来有点像这样:
| 爱丽丝 | 鲍勃 | 卡拉 | 戴夫 | |
|---|---|---|---|---|
| 角色 | 角色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数组相同的方法或其他方式来组合它们?
我怀疑我将被迫使用宏,但这似乎有点矫枉过正
我遇到了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对我来说并不是一个真正的选择,所以我正在寻找一种让像这样的对象得到垃圾回收的方法.