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)) 

適用於多線程環境。