Очередное зависание Lua-скрипта

Страницы: 1
RSS
Очередное зависание Lua-скрипта, в функции getDepoEx
 
QUIK 13.0.0.165
Заинтересованные могут протестировать, скачав архив рабочего места по ссылке: https://cloud.mail.ru/public/PnRh/78X5kdGEB
Подключаться к серверу не требуется. Достаточно добавить в окно "Доступные скрипты" скрипт getDepoEx.lua (лежит в папке с программой) и запустить его.
Код
function main()
  local n = getNumberOf("depo_limits")
  message("Number depo_limits: " .. n)
  if n > 0 then
    getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)
  end
  message("Завершение работы main.")
end

При запуске скрипта в окне "Системные сообщения" появляется сообщение "Number depo_limits: 4", и скрипт остаётся в запущенном состоянии. Сообщения "Завершение работы main." нет, что говорит о том, что не происходит выхода из функции getDepoEx.
При этом процесс info.exe грузит один из логических процессоров на 100%.
 
Добрый день.

Возможно, дело в том, что цикл, где вы пытаетесь получить позиции по инструменту, не останавливается т.к. в функцию getDepoEx были введены некорректные данные.

В качестве последнего параметра limit_kind указывается срок расчетов и getDepoEx принимает это значение в формате NUMBER. Возможные значения - положительные целые числа, начиная с «0», соответствующие срокам расчетов из таблицы «Позиции по инструментам»: «0» – T0, «1» – T1, «2» – T2 и т.д.

Попробуйте изменить этот момент и проверьте работу скрипта.
 
Не смог промолчать, прочитав ответ техподдержки.

1) В опубликованном в первом сообщении темы коде НЕТ ЦИКЛА.

2) limit_kind может принимать значения типа 20260601, если лимитирование идёт по календарным дням, а не по схеме T0, T1 и т.д.

3) В случае некорректных значений функция getDepoEx всё равно должна завершать свою работу без зависания.

4) Адекватной реакцией техподдержки должна быть попытка воспроизведения проблемы на своём тестовом контуре с одним из выводов: удалось воспроизвести и будем чинить, или не удалось воспроизвести.
 
Для п.2 приведу ссылку на тему форума, где было обсуждение такой схемы лимитирования.
https://forum.quik.ru/forum10/topic8865/
В документации QLua версии 13.0 этот момент не отражён.
 
Здравствуйте.

В ходе тестирования скрипта, у нас не возникло проблем, ошибок или зависаний Рабочего места. В окне сообщений появляются оба сообщения: о количестве позиций по инструментам и о завершении работы main.

Подскажите, пожалуйста, представленная часть кода - это весь скрипт? Запущены ли еще какие-то скрипты параллельно?
 
Oleg Kuzembaev, что показывает следующий скрипт?
Код
function main()
  local sec_code = "SBER"
  local n = getNumberOf("depo_limits")
  if n > 0 then
    message("Number depo_limits: " .. n)
    for i = 0, n - 1 do
      local l = getItem("depo_limits", i)
      message(l.sec_code .. ": limit_kind = " .. l.limit_kind .. "; currentbal = " .. l.currentbal .. "; wa_position_price = " .. l.wa_position_price)
    end
    message(tostring(getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)))
  else
    message("depo_limits not found", 2)
  end
  message("Завершение работы main.")
end
 
Попробовал, не воспроизводиться.QUIK 13.0.0.165.
 
Цитата
Станислав написал:
Попробовал, не воспроизводиться.QUIK 13.0.0.165.
Вы что-то другое пробовали. В архиве, что я выложил (ссылка в первом посте), другие лимиты.
 
Возможно архив кривой
При обновлении остались какие-то старые библиотеки.
Поставьте КВИК с нуля
 
Если использовать архив из первого сообщения, то проблема действительно воспроизводится, однако, только если не подключаться к серверу.
Стоит подключиться к серверу, скрипт корректно выполняется.  
 
Станислав, я не знаю как вы тестируете, но из вашего скрина видно, что код getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601) не должен был вернуть table. Ну нет у вас лимитов с такими вводными.

Цитата
Станислав написал:
Стоит подключиться к серверу
и лимиты обновятся, это будет уже другой набор данных.

Цитата
Станислав написал:
Если использовать архив из первого сообщения, то проблема действительно воспроизводится, однако, только если не подключаться к серверу.
Я локализовал проблему, выложил архив, на котором воспроизводится описанная мной проблема. Что ещё нужно?
 
Здравствуйте.

Мы не занимаемся тестированием скриптов. Если у вас есть вопросы по какой-то конкретной функции, просьба озвучить их и мы постараемся помочь.
 
Цитата
Oleg Kuzembaev написал:
В ходе тестирования скрипта, у нас не возникло проблем, ошибок или зависаний Рабочего места.
Вы проверяли на рабочем месте из архива по ссылке в первом посте, без изменения настроек и кода скрипта и без подключения к серверу?
 
Тест проводился на подключенном к серверу терминале, что является корректным условием для работы скрипта.
 
Цитата
Oleg Kuzembaev написал:
Тест проводился на подключенном к серверу терминале, что является корректным условием для работы скрипта.
Зря Вы это написали, т.к. в таком случае документацию необходимо обновлять и точно указывать для каких методов не гарантируется корректная работа при отсутствии соединения. Более того, если в процессе работы происходит разрыв соединения и в этот момент скрипт выполняет метод, который может привести к "зависанию" терминала, то это уже совсем не корректно, а вполне себе ошибка. И чтобы её избежать необходимо понимать какие методы необходимо обрамлять предварительной проверкой на наличие соединения.
 
Цитата
Nikolay написал:
Цитата
Oleg Kuzembaev написал:
Тест проводился на подключенном к серверу терминале, что является корректным условием для работы скрипта.
Зря Вы это написали, т.к. в таком случае документацию необходимо обновлять и точно указывать для каких методов не гарантируется корректная работа при отсутствии соединения. Более того, если в процессе работы происходит разрыв соединения и в этот момент скрипт выполняет метод, который может привести к "зависанию" терминала, то это уже совсем не корректно, а вполне себе ошибка. И чтобы её избежать необходимо понимать какие методы необходимо обрамлять предварительной проверкой на наличие соединения.
если правильно понял, то зависание происходит при отсутствии лимитов
Такая ситуация невозможна при разрыве соединения.
Ситуация возникает лишь при старте терминала.
Да и то при отсутствии колбека конфигурации, цикла в main и каких-либо ожиданий прихода данных,
либо проверки их доступности.
Более нелепого (мягко скажу)  скрипта я еще не видел.
----------------------------
Но соглашусь, что зависания не должно быть даже в самых  дурацких скриптах.
------------------------------------
Раньше такой же эффект был с функцией получения пути к скрипту, если ее поставить первой строкой в скрипте.
Проблему после указания на нее исправили.
Страницы: 1
Читают тему
Наверх