Python Google 日历 API 内存问题

Python Google Calendar API memory issue

我正在使用 Google 中的参考 Python 代码(下面的 link),它使用 Google 日历 API 来获取接下来的 10 个事件从我的 Gmail 日历。这工作正常。

但是,我的最终目标是每 30 分钟为新事件集成一次日历。因此,我一直在循环中 运行 处理代码,并且我注意到每次检查 运行 时,系统内存使用量都会增加。 好吧,我每次都说,但实际上它似乎是随机的。有时它会 运行 50 次而不增加足迹,其他时候每次都会增加。 如果 运行 时间足够长,应用程序会崩溃。

我运行在 Raspberry Pi 上讨论这个如果有任何相关性的话。抱歉,我承认我不是开发人员,我真的希望我遗漏了一些明显的东西!

我使用的代码来自这里: https://developers.google.com/google-apps/calendar/quickstart/python#step_3_set_up_the_sample

我所做的唯一更改是 运行 循环中的“主要”过程,如下所示:

while True:
    main()
    print ('Sleeping')
    sleep (60)

我还插入了以下代码行来输出应用程序中各个点的内存使用情况:

print ('Memory usage at start: %s (kb)' % resource.getrusageresource.RUSAGE_SELF).ru_maxrss) #print memory usage

从我所做的测试来看,服务构建似乎增加了内存使用:

service = discovery.build('calendar', 'v3', http=http)

我正在寻找一种方法来阻止内存使用失控,我们将不胜感激。

提前致谢 蒂姆

尝试通过从 main() 中删除下面的行来将其从循环中删除,因为这仅用于初始化您的应用程序的身份验证。

credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('calendar', 'v3', http=http)

此外,sleep() 的参数以秒计算,请改用“1800”,因为您希望它每 30 分钟 运行。

您可以尝试像下面这样实现您的代码

credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('calendar', 'v3', http=http)
while True:
main()
print ('Sleeping')
sleep (1800)

此外,您可以用 weakref.proxy 对象包装您的服务对象。

import weakref
# ... code
service = weakref.proxy(discovery.build('calendar', 'v3', http=http))

在多线程环境中适合我。