1

Я использую код ссылки Python из Google (ссылка ниже), которая использует API календаря Google для получения следующих 10 событий из моего календаря Gmail. Это работает нормально.Проблема с памятью API Календаря Python

Однако моя конечная цель состоит в том, чтобы календарь был интегрирован для новых событий каждые 30 минут. Таким образом, я запускаю код в цикле, и я заметил, что каждый раз, когда выполняется проверка, увеличивается используемая системная память. Ну, я говорю каждый раз, но на самом деле это кажется случайным. Иногда он будет работать 50 раз без увеличения площади, в других случаях он будет увеличиваться каждый раз. Если вы запускаете достаточно долго, приложение падает.

Я запускаю это на малине 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) 

Я ищу способ, чтобы остановить использование памяти, получая из рук, любая помощь будет принята с благодарностью.

Спасибо заранее Tim

ответ

0

Попробуйте удалить строки ниже из петли, удалив его из 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) 
+0

Большое вам спасибо! Я проводил параллельный тест, так как я читал ваши советы. До сих пор результаты выглядят очень позитивно, поэтому я собираюсь отметить это как ответ. Еще раз спасибо! –

0

Кроме того, вы можете обернуть объект службы с weakref.proxy объекта.

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

Работы для меня в многопоточной среде.

Смежные вопросы