1

我使用Google的参考Python代码(下面的链接),它使用Google Calendar API从我的Gmail日历中获取下一个10个事件。这工作正常。Python Google Calendar API内存问题

但是,我的最终目标是每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) 

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

预先感谢您 添

回答

0

尝试,因为这仅仅是用于初始化应用程序的认证从main()删除它删除下面圈外的线。

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

而且,而是因为你希望它每30分钟运行sleep()参数算作秒,使用“1800”。

您可以尝试实现像下面

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

非常感谢!自从我阅读您的建议以来,我一直在进行平行测试。 到目前为止结果看起来非常积极,所以我打算将其标记为已回答。 再次感谢您! –

0

此外,您还可以weakref.proxy对象包装你的服务对象代码。

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

适用于多线程环境。