小编Sim*_*tte的帖子

如何使用pympler跟踪/修复tornado-redis中的内存泄漏?

我一直在尝试使用龙卷风Redis的(这基本上是一个叉brükva略作修改与tornado.gen接口而不是adisp工作),以便通过使用提供事件的Redis'发布订阅.

所以我写了一个小脚本来测试这个例子的灵感.

import os

from tornado import ioloop, gen
import tornadoredis


print os.getpid()

def on_message(msg):
    print msg

@gen.engine
def listen():
    c = tornadoredis.Client()
    c.connect()
    yield gen.Task(c.subscribe, 'channel')
    c.listen(on_message)

listen()

ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我PUBLISH通过redis-cli内存使用率不断上升时.

为了描述内存使用情况,我首先尝试使用guppy-pe,但它不能在python 2.7下运行(是的,甚至尝试过后备箱),所以我又回到了pympler.

import os

from pympler import tracker
from tornado import ioloop, gen
import tornadoredis


print os.getpid()

class MessageHandler(object):

    def __init__(self):
        self.memory_tracker = tracker.SummaryTracker()

    def on_message(self, msg):
        self.memory_tracker.print_diff()

@gen.engine
def listen():
    c = …
Run Code Online (Sandbox Code Playgroud)

python tornado memory-profiling redis

7
推荐指数
1
解决办法
1309
查看次数

过滤PointField的查询集字段,以查找特定距离范围内的项目是否不正确

我想过滤特定范围内的项目的查询集.这就是我的模型

class modelEmployee(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    location = models.PointField(srid=4326,max_length=40, blank=True,null=True) 
    objects = GeoManager()
Run Code Online (Sandbox Code Playgroud)

现在这就是我运行过滤器命令的方式.返回90英里特定范围内的物品.

qset = modelEmployee.objects.filter(location__distance_lte=(someLocation, D(mi=90)))
Run Code Online (Sandbox Code Playgroud)

结果返回一个物品,其距离实际为223.732英里,它不应该返回.

这些是两个项目的位置

location A - lat: 47.628641 and long: -117.402997

location B - lat: 47.618337 and long: -122.205341
Run Code Online (Sandbox Code Playgroud)

两者的距离实际为223.732英里.我必须过滤它错了.关于我可能出错的地方的任何建议?

django django-models geospatial geodjango

5
推荐指数
1
解决办法
561
查看次数