Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2011 23:50:04

red5
От:
Зарегистрирован: 2011-05-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Утечки памяти в простой Python программе с OpenOPC

# -*- coding: utf-8 -*-
import signal
import sys
import OpenOPC

# заверашение по Ctrl+C
def signal_handler(signal, frame):
print 'You pressed Ctrl+C.'
sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

while True :
o = OpenOPC.client()
o.connect('Graybox.Simulator')
o.read('numeric.random.uint16')
o.close()
Пробовал два разных OPC сервера: Matrikon и Graybox.
Cкрипт увеличивает используемую память на килобайт в секунду с Graybox и на 0,5кб в минуту с Matrikon.
Если объект создавать один раз до цикла, то память увеличивается на 0,5 кб в минуту в обоих серверах.
Пробовал разные ПК с WinXP.
Как бороться с этими утечками?
Причина в OPC серверах? Если так, то почему после завершения программы память освобождается?



Офлайн

#2 Май 29, 2011 07:38:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Утечки памяти в простой Python программе с OpenOPC

А вы уверены что это утечки? OPC кеширует получаемые данные на стороне клиента. Насколько долго вы наблюдали за процессом поедания памяти? Создание клиента в цикле выглядит неправильно.

Я бы выход сделал несколько иначе

try:
while 1:
print "aa"
except KeyboardInterrupt:
print "exit"
Мне такой подход кажется более питоновским :)



Отредактировано (Май 29, 2011 07:45:05)

Офлайн

#3 Май 29, 2011 10:25:55

red5
От:
Зарегистрирован: 2011-05-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Утечки памяти в простой Python программе с OpenOPC

Спасибо за подсказку с исключением.
Размер питоновской программы в памяти (WM размер) постепенно увеличивается с 10 мб до 300 мб, дальше не пробовал.
Похоже придётся каждые полчаса перезагружать питоновский процесс.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version