Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?

Страницы: 1
RSS
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?
 
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?

В настоящий момент реализована передача через текстовый Файл.
То есть Quik записывает постоянно перезаписывает файл, а функция watchdog на Python его подхватывает и обрабатывает
Но есть проблема - жуткие тормоза!

Подскажите как сделать через ПАМЯТЬ ??

Спасибо!
 
named pipes, socket
 
Цитата
Nikolay написал:
named pipes, socket
А поподробнее ? )))
 
Цитата
Nikolay написал:
named pipes, socket
Просто я знаком только с языками LUa и Python
Не понимаю как организовать взаимодействие между named pipes в Qiuk и python
Спасибо
 
named pipes Lua поддерживает "прямо из коробки"
Код
    local pipe = io.open("\\\\.\\PIPE\\"..pipe_name, "w+b")
    if not pipe then
        return
    end
    pipe:write('BlaBla') -- записываем команду в канал

--Читаем
    local rd = ''
    local ct = os.time()
    -- Для примера: Т.к. время ожидания ответа может быть не мгновенным, то ожидаем 2 секунды, читая из канала ответ.
    while os.time() - ct < 2 and rd == '' do
        rd = pipe:read('*a')
    end
    tele_pipe:close() -- закрываем канал

А python - это же такая "помойка". Неужели нет готовой библиотеки сервера named pipes? Поиск выдает тонны вариантов.
 
Цитата
Nikolay написал:
named pipes Lua поддерживает "прямо из коробки"
Код
       local  pipe  =   io.open ( "\\\\.\\PIPE\ \"   .. pipe_name,  "w+b" )
     if   not  pipe  then 
         return 
     end 
    pipe:write( 'BlaBla' )  -- записываем команду в канал 

 --Читаем 
     local  rd  =   '' 
     local  ct  =   os.time ()
     -- Для примера: Т.к. время ожидания ответа может быть не мгновенным, то ожидаем 2 секунды, читая из канала ответ. 
     while   os.time ()  -  ct  <   2   and  rd  =  =   ''   do 
        rd  =  pipe:read( '*a' )
     end 
    tele_pipe:close()  -- закрываем канал   

А python - это же такая "помойка". Неужели нет готовой библиотеки сервера named pipes? Поиск выдает тонны вариантов.
Попробую разобраться
Готовые библиотеки это подключаемые DLL ?
 
Цитата
Alex написал:
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?

В настоящий момент реализована передача через текстовый Файл.
То есть Quik записывает постоянно перезаписывает файл, а функция watchdog на Python его подхватывает и обрабатывает
Но есть проблема - жуткие тормоза!

Подскажите как сделать через ПАМЯТЬ ??

Спасибо!
Я использую mapping для связи приложений и потоков.
---------------------
Для питона можно посмотркть здесь:

https://docs.python.org/3/library/mmap.html
 
Цитата
Nikolay написал:
named pipes Lua поддерживает "прямо из коробки"
Код
       local  pipe  =   io.open ( "\\\\.\\PIPE\ \"   .. pipe_name,  "w+b" )
     if   not  pipe  then 
         return 
     end 
    pipe:write( 'BlaBla' )  -- записываем команду в канал 

 --Читаем 
     local  rd  =   '' 
     local  ct  =   os.time ()
     -- Для примера: Т.к. время ожидания ответа может быть не мгновенным, то ожидаем 2 секунды, читая из канала ответ. 
     while   os.time ()  -  ct  <   2   and  rd  =  =   ''   do 
        rd  =  pipe:read( '*a' )
     end 
    tele_pipe:close()  -- закрываем канал   

А python - это же такая "помойка". Неужели нет готовой библиотеки сервера named pipes? Поиск выдает тонны вариантов.
Пытался запустить Ваш скрипт, выдает. ошибку.   attempt to index a nil value (local 'pipe')
 
Цитата
Alex написал:
Пытался запустить Ваш скрипт, выдает. ошибку.   attempt to index a nil value (local 'pipe')
Правильно. Lua умеет писать (читать) в существующий "именованый файл". Поэтому на другой стороне его надо создать. Т.е. нужен сервер (служба), обслуживающий каналы. Вот его и надо на стороне питона делать
 
Цитата
nikolz написал:
Цитата
Alex написал:
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?

В настоящий момент реализована передача через текстовый Файл.
То есть Quik записывает постоянно перезаписывает файл, а функция watchdog на Python его подхватывает и обрабатывает
Но есть проблема - жуткие тормоза!

Подскажите как сделать через ПАМЯТЬ ??

Спасибо!
Я использую mapping для связи приложений и потоков.
---------------------
Для питона можно посмотркть здесь:

https://docs.python.org/3/library/mmap.html
А можете пример скинуть, что бы проще было разбираться
Спасибо
 
Получается что mmap всё равно работает чем файловую систему.
 
Переписать скрипт на Lua - всё остальное в морг.
 
Цитата
Alex написал:
Получается что mmap всё равно работает чем файловую систему.
Вот перечень методов обмена данными из моего арсенала:
-------------------
1) самый быстрый способ (почти)  shared mеmory .  
Использую его для передачи небольших объемом и синхронизации потоков.
----------------------------
2)  DDE - использую его для получения таблицы ТТТ и доски опционов в луа .
----------------------------
3) Mapping file - обмен любыми объемами данных между процессами и потоками.
Использую его для индикаторов, ИИ,  сбора исторических данных  об инструментах на биржах.
===========================
Маппинг это не обмен через файлы, а отображение файлов на адресное пространство процессов.
Две большие разницы.
======================
 
Вот, вспомнил про это решение. Не пробовал сам, но в основе там socket

https://github.com/cia76/QuikPy.git
 
Цитата
nikolz написал:
shared mеmory

Мне надо передать "строку" (string) из QUIK (lua) на скрипт Python.
Подскажи пож самый простой способ, но не через жесткий диск.
Может какой пример завалялся ?

В настоящий момент у меня реализована передача через текстовый Файл.
То есть Quik записывает (постоянно перезаписывает) файл txt, а функция Watchdog на Python его подхватывает и обрабатывает

Спасибо
 
Цитата
Alex написал:
Цитата
nikolz написал:
shared mеmory

Мне надо передать "строку" (string) из QUIK (lua) на скрипт Python.
Подскажи пож самый простой способ,  но не через  жесткий диск.
Может какой пример завалялся ?

В настоящий момент у меня реализована передача через текстовый Файл.
То есть Quik записывает (постоянно перезаписывает) файл txt, а функция Watchdog на Python его подхватывает и обрабатывает

Спасибо
Выше уже предлагали использовать pipe.
https://stackoverflow.com/questions/1242572/how-do-you-construct-a-read-write-pipe-with-lua
https://github.com/baishancloud/lua-pipe
и т.д.
Что не устраивает?
-------------------
Почему не устраивает через файл?
===================
Чтобы передать иначе, надо нырнуть в СИ.
---------------------
На Си делаете что хотите,  потом две обертки для питона и луа.
---------------------
Если Си знаете, то все просто, если нет, то нет смысла в примерах.
 
 
Цитата
Alex написал:
Цитата
nikolz написал:
shared mеmory

Мне надо передать "строку" (string) из QUIK (lua) на скрипт Python.
Подскажи пож самый простой способ,  но не через  жесткий диск.
Может какой пример завалялся ?

В настоящий момент у меня реализована передача через текстовый Файл.
То есть Quik записывает (постоянно перезаписывает) файл txt, а функция Watchdog на Python его подхватывает и обрабатывает

Спасибо
Написал библиотеку для  обмена строкой приложений, процессов и  потоков на Си,Lua,Python.
----------------------
Если надо, пишите в личку почту.
---------------------------
Пока могу выслать бесплатно для тестирования вариант с максимальной длиной строки 63 символа .
Страницы: 1
Читают тему
Наверх