Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp? - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?

Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?

Ответ
Поиск в этой теме
Непрочитано 19.10.2022, 10:17
Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?
power85
 
Регистрация: 03.02.2017
Сообщений: 61

Здравствуйте
Имеется lisp код на 1600 строк выполнятся, он может 12час. Определено узкое место. Нужно распараллелить вычисления на многоядерном процессоре.
Кроме этого я знаю языки Python и Vba. В Python есть, возможно, распараллелить вычисления и сделать функцию для узкого места. Но как её использовать в lisp?
Переписать весь код lisp 1600 строк в код на Python не реально.
Просмотров: 5933
 
Непрочитано 19.10.2022, 12:51
#21
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На входе в функцию данные, которые как-то структурированы и которые надо каким-то хитрым образом обработать. И вернуть тоже список, чтобы не порушить остальной код.
К примеру:
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
румата вне форума  
 
Автор темы   Непрочитано 19.10.2022, 12:53
#22
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да, можно. Просто у меня на такие вещи почему-то достаточно большие потери на разбор входящих данных (если это списки какие-то достаточно странные) и формирование выходных списков. Но из меня NET-программист как из слона балерина
Цитата:
Сообщение от румата Посмотреть сообщение
Да, можно.
Отлично. Буду пробовать.
power85 вне форума  
 
Непрочитано 19.10.2022, 12:53
#23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от power85 Посмотреть сообщение
А где можно про это почитать? Или как это делается?
лучше этого не делать) особенно если скорость важна. Ведь каждый командный метод - это прерывание выполнения .Net функции с передачей управления акаду и ожидание, когда акад соизволит передать управления обратно.
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 12:54
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,407


Цитата:
Сообщение от румата Посмотреть сообщение
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
Хм, в таком ключе еще не думал... Побрел искать, читать и пытаться осознать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2022, 12:54
#25
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от power85 Посмотреть сообщение
А где можно про это почитать? Или как это делается?
Здесь можно посмотреть. Там и примеры и куски кода
румата вне форума  
 
Непрочитано 19.10.2022, 12:55
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от румата Посмотреть сообщение
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
ну там то речь шла - чтобы не переделывать остальной код на лиспе для использования .Net)

----- добавлено через ~3 мин. -----
а передача данных из условной Лисп-машины в .Net функцию и обратно явно будет узким местом как стык между управляемым кодом .Net и тем же ActiveX
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 13:02
#27
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну там то речь шла - чтобы не переделывать остальной код на лиспе для использования .Net)
Так не получится.

----- добавлено через 51 сек. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а передача данных из условной Лисп-машины в .Net функцию и обратно явно будет узким местом как стык между управляемым кодом .Net и тем же ActiveX
*
Нужно будет городить промежуточный обмен файлом для передачи внутренних массивов данных между лисп и net

----- добавлено через ~9 мин. -----
Цитата:
Сообщение от румата Посмотреть сообщение
Здесь можно посмотреть. Там и примеры и куски кода
Прошу прощения немного не ту ссылку сделал. Здесь можно посмотреть как использовать внутренние команды через обращение к командной строке.

Последний раз редактировалось румата, 19.10.2022 в 13:12.
румата вне форума  
 
Непрочитано 19.10.2022, 13:12
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от румата Посмотреть сообщение
Нужно будет городить промежуточный обмен файлом для передачи внутренних массивов данных между лисп и net
здесь возникает вопрос - а зачем собирать информацию в более медленном лиспе, потом пропихивать ее в .Net метод, а после этого - возможно, еще и обратно?

Имхо, рациональнее Lisp-подобные функции использовать в следующих случаях:
1. Диалоги (причем помимо диалога можно там же и с БД работать или иным внешним хранилищем. и т.п.). И возвращать лишь конечный результат.
2. Обработка больших объемов информации по некоторому конечному набору критериев (пускай с самой БД dwg чертежа уже внутри .Net метода работает).
3. Реализация функционала, отсутствующего в самом Lisp (по сути альтернатива подключаемым внешним библиотекам).
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 13:37
#29
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Имхо, рациональнее Lisp-подобные функции использовать в следующих случаях:
Лисп-функции программируемые из-под .net это же просто обертки над net с ограничинным набором типов данных, которыми можно обмениваться при последующем программировании на лиспе. Чтобы не было проблем это ограничение нужно иметь в виду при написании программ на лиспе. А скорость обмена данными между такими функциями и родными лисповскими функциями через ResultBuffer и TypedValue, по идее, не должна стать узким местом. Хотя внутренние издержки, конечно, будут.
румата вне форума  
 
Автор темы   Непрочитано 19.10.2022, 13:46
#30
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от румата Посмотреть сообщение
Лисп-функции программируемые из-под .net это же просто обертки над net с ограничинным набором типов данных, которыми можно обмениваться при последующем программировании на лиспе. Чтобы не было проблем это ограничение нужно иметь в виду при написании программ на лиспе. А скорость обмена данными между такими функциями и родными лисповскими функциями через ResultBuffer и TypedValue, по идее, не должна стать узким местом. Хотя внутренние издержки, конечно, будт.
Спасибо. Буду разбираться и пробовать.
power85 вне форума  
 
Непрочитано 19.10.2022, 13:53
#31
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от румата Посмотреть сообщение
Лисп-функции программируемые из-под .net это же просто обертки над net
точнее - это код .Net, помеченный атрибутом LispFunction для возможности взаимодействия с Lisp-кодом путем встраивания дополнительных метаданных в сборку. Иначе как акад узнает - что там программист решил реализовывать в сборке, если он (акад) сможет из метаданных получить только название метода без дополнительной информации.

А обмен большим объемом данных через аргументы не является узким местом, если эти данные передаются в виде ссылки на объект (объект класса списка и т.д.). Тогда эта ссылка на объект, переданная через стек, копируется во внутренний указатель метода (поведение по умолчанию) - а работа внутри функции ведется по факту с исходным объектом. А если нужно переупаковывать из одного формата данных в другой - там каждый вызов метода будет вызывать расход ресурсов.
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 22:46
2 | #32
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Сергей812,
Передача большого списка (десятки тысяч элементов и больше) из VisualLisp в lisp-функцию, созданную при помощи .NET очень не рекомендую. Замечал очень большие задержки именно на этапе передачи списка. Причем это не только в .NET, но и в чистом ObjectARX.
Александр Ривилис вне форума  
 
Непрочитано 20.10.2022, 09:29
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Передача большого списка (десятки тысяч элементов и больше) из VisualLisp в lisp-функцию, созданную при помощи .NET очень не рекомендую. Замечал очень большие задержки именно на этапе передачи списка. Причем это не только в .NET, но и в чистом ObjectARX.
насколько понимаю, список лиспа являет однонаправленным списком и передается значение первого элемента (в отличие от указателя на начало области памяти массива, как в "классических" языках программирования). И, соответственно, вместо передачи напрямую в ObjectARX/.Net списка как ссылки на коллекцию происходит проход по всему списку.
Сергей812 вне форума  
 
Непрочитано 20.10.2022, 10:19
#34
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
И, соответственно, вместо передачи напрямую в ObjectARX/.Net списка как ссылки на коллекцию происходит проход по всему списку.
Да. Даже передаваемый по ссылке ResultBuffer нужно форычить для дальнейшей работы с передаваемыми данными.
румата вне форума  
 
Непрочитано 20.10.2022, 11:44
#35
Петр-и-Алекс


 
Регистрация: 18.01.2021
Сообщений: 404


когда то существавали компиляторы lisp
конечно же с большими ограничениями ... и за деньги (не большие вообще то)
не знаю, как оно сегодня обстоит
Петр-и-Алекс вне форума  
 
Непрочитано 20.10.2022, 21:55
#36
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Там долго происходит проверка (поиск) куда можно поставить мультивыноски между примитивами. А проверка происходит на пересечения.
надо использовать RTree
trir вне форума  
 
Непрочитано 20.10.2022, 22:07
#37
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от trir Посмотреть сообщение
надо использовать RTree
А есть такая структура данных в объектной модели автокада?
румата вне форума  
 
Непрочитано 20.10.2022, 22:28
#38
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


https://habr.com/ru/post/278765/

https://github.com/rpav/spatial-tree...r/r-trees.lisp
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли на языке Python сделать графическую программу по анализу тензора напряжений? PETR_THE_GREAT Программирование 4 17.02.2022 16:15
Можно ли использовать для шпилек резьбовые штанги вместо арматуры? Drake Железобетонные конструкции 9 22.06.2021 03:38
Можно ли для отделки пола в Технических помещениях торгового центра использовать линолеум Г1В2Д2Т2РП1 ? drill_man Поиск литературы, чертежей, моделей и прочих материалов 32 06.04.2013 15:54
Какую версию ObjectARX с каким AutoCAD можно можно использовать? nav3000 Программирование 3 01.12.2012 21:37
Можно ли использовать формы VBA для запуска lisp команд? Kserg_nn LISP 4 05.02.2010 20:00