首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Raven非常慢

Django Raven非常慢
EN

Stack Overflow用户
提问于 2013-09-25 19:22:17
回答 1查看 1.2K关注 0票数 5

我在django中使用raven和getsentry记录消息,但是记录似乎延迟了代码的执行。例如:

代码语言:javascript
复制
# ...view code
tic = datetime.datetime.now()
logging.warning('foo warning')
toc = datetime.datetime.now()
print "log time %s, %s, %s" % (tic, toc, (toc - tic).total_seconds())
# more view code...

给出输出:

代码语言:javascript
复制
log time 2013-09-25 12:03:56.541091, 2013-09-25 12:03:57.139420, 0.598329

也就是说,在这种情况下,它将代码的执行延迟了600ms。这是意料之中的事情吗?我本以为消息是在单独的线程中异步发送的,这样主代码就不会被延迟。另外,我对app.getsentry.com的ping时间是125ms,所以即使消息是同步发送的,600ms仍然显得奇怪地大。有没有一些配置我可以更改,让事情更快?

设置文件:

代码语言:javascript
复制
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'handlers': {
        'sentry': {
            'level': 'INFO',
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        },
    },
    'loggers': {
        '': {
            'handlers': ['sentry'],
            'level': 'INFO',
            'propagate': True,
        },
    }
}    

===编辑===

感谢Filip Dupanović指出了threading+协议。可悲的是,由于线程在启动工作线程时被复制,所以它们不适用于我的gunicorn。我修复了它,在gunicorn配置文件中添加了一个post_fork钩子,如下所示:

代码语言:javascript
复制
import logging
from raven.contrib.django.handlers import SentryHandler
from raven.transport.threaded import ThreadedHTTPTransport


def post_fork(server, worker):
    LOG = logging.getLogger()
    for handler in LOG.handlers:
        if isinstance(handler, SentryHandler):
            for url, transport in handler.client._registry._transports.items():
                if isinstance(transport, ThreadedHTTPTransport):
                    if hasattr(transport, '_worker'):
                        server.log.info("deleting sentry thread worker attribute")
                        delattr(transport, '_worker')
                    else:
                        server.log.info("sentry thread worker not present, nothing to do.")

Obv这是一个技巧,虽然它对我有效,但我不知道它是否能在其他地方工作。

EN

回答 1

Stack Overflow用户

发布于 2013-09-25 20:20:03

如果您使用托管的Sentry服务,您可能会从切换到threaded+http传输中受益,Raven完全支持该传输。看看Raven's documentation,了解如何在服务名中正确配置传输。

您可能还想尝试切换到其他一些专门的并发传输或UDP协议。虽然您不能将ICMP请求延迟与TCP进行比较,但是增加的开销是可怕的,可以解决,所以不要害怕!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19003550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档