我正在使用gevent.monkey.patch_all()然后导入线程。
从线程我导入Thread并创建一个新的线程:
{ sequence: [
[{column:3},{column:1}],
[{column:3}]
}
然后我多次执行此代码路径,我可以看到内存增长,永远不会被释放。释放可能需要几个小时才能完成。
但是,如果我直接做 处理器(参数) 我的内存没有增加。
我需要杀死一些线程吗?还是停下来?
由于
答案 0 :(得分:0)
如果我告诉你,我认为你想在background
处执行一些任务并定期执行或在整个生命周期内执行事件。启动此后台任务的过程也存在于内存中吗?
您可以使用gevent.spwan
来实现此目的。这是实际的co-routine
。
background.py: -
import gevent
import gevent.monkey
import datetime
import time
gevent.monkey.patch_all()
def my_task(*args, **kwargs):
with open("/tmp/test.log", "a+") as f:
f.write("time: {}\n".format(datetime.datetime.now()))
def exec_background(task, *args, **kwargs):
"""
Run Your `task` background with given `args` and `kwargs`.
"""
def run_periodically(*args, **kwargs):
while 1:
gevent.sleep(1)
task(*args, **kwargs)
return gevent.spawn(run_periodically, *args, **kwargs)
if __name__ == "__main__":
exec_background(my_task)
print "Waiting... Do other stuffs here !"
time.sleep(100)
通过这种方式,您可以重复使用exec_background
方法将不同的任务放在后台。
$ python background.py
Waiting... Do other stuffs here !
检查文件tail -f /tmp/test.log
您可以看到内容附加在后台。
关于你的超量内存使用情况,我认为它主要与你的任务有关。您可能正在进行大量的网络操作,因此请确保正确清理内容。 Python内存管理器大部分时间都在进行垃圾收集,因此我认为没有任何问题。
检查应用程序整个生命周期的任务逻辑,以及累积某些资源(如套接字或某些对象)的可能性。使用Python上下文管理器:)。
希望这会对你有所帮助。