使用Django通道、apscheduler和googleoauth2clien的内存泄漏

2024-10-09 01:17:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码每隔X秒从Google Analytics提取数据,并通过Django Channels将其推送到WebSocket前端。我使用一个apscheduler BackgroundScheduler在指定的时间间隔上运行tick函数。但是当我运行这个程序时,内存使用量以一个非常恒定的速率增长,即使我所做的只是授权oauth API。示例代码来自消费者.py公司名称:

from channels.sessions import channel_session
from apscheduler.schedulers.background import BackgroundScheduler
from oauth2client import transport
from apiclient.discovery import build

scheduler = BackgroundScheduler()

def tick(group_id):
    user = GoogleUser.objects.all()[0]
    # gets DjangoORMStorage instance
    credentials = get_credentials(user).get() 

    # THESE TWO LINES SEEM TO CAUSE THE MEMORY LEAK
    oauth_http = credentials.authorize(transport.get_http_object())
    analytics = build('analytics', 'v3', http=oauth_http)

@channel_session
def ws_connect(message):
    # accept socket connection and add channel to group
    message.reply_channel.send({"accept": True})

    # add channel to websocket channel group
    redis_group = Group(group_id, channel_layer=None)
    redis_group.add(message.reply_channel)

    # schedule job
    scheduler.add_job(tick, 'interval', id=slug, kwargs={
        'group_id': group_id,
    }, seconds=settings.INTERVAL)
    scheduler.start()

Tags: 代码fromimportaddidhttpmessageget

热门问题