-
Notifications
You must be signed in to change notification settings - Fork 107
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Фоновые задания #764
Comments
смешно, да :) |
@artbear вполне себе употребляются, пока не появляются "разделяемые ресурсы" - вот тогда "просто" улетает в мусор. |
Ну в |
@khorevaa вопрос, повторюсь, в разделении ресурсов. Синтаксис-то можно выдумать, концепции нет |
@dmpas Я тебя не понимать.. что за разделение ресурсов ... Кого делим и как... |
@khorevaa вот ты чего хочешь фоново распараллелить? |
@khorevaa ты же фоновое задание хочешь с какими-то параметрами запустить? и это явно не строка, а например, массив? таблица значений? классы настроенные какие-нибудь?.. |
@dmpas Я хочу распараллелить синхронизацию с хранилищем по нескольким репозиторием.. @nixel2007 Да захочу )) Ну можно это все копировать в процесс - как дубликаты.... |
@khorevaa то есть ты хочешь отказаться от jenkins ? Что касается фоновых заданий - то они тут https://github.com/EvilBeaver/OneScript.Web/blob/develop/examples/backgroundjobs/src/model/modules/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B8%D0%A4%D0%BE%D0%BD%D0%BE%D0%B2%D1%8B%D1%85.os |
@allustin я не могу отказаться от того чего у меня нет. Но вообще смысл чутка другой... а именно многопоточное выполнение приложения и сервер сборок тут не причем |
@allustin @dmpas Мне вот на ум приходит задача асинхронного запуска приложений, т.е. не ждать пока приложение выполнится, а подвесить "Новый ОписаниеОповещения("МойМетод")" и там уже анализировать вывод команды. |
@arkuznetsov через ОписаниеОповещения мне нравится, развивай мысль. |
@dmpas // Основной код
МойОбработчик = Новый МойКлассОбработчик();
МойОбъект = Новый МойКласс();
ПараметрыОбработки = Новый Массив();
ОписаниеОповещения = Новый ОписаниеОповещения("МойМетодОбработки", МойОбработчик, ПараметрыОбработки);
Параметры = Новый Массив();
ВыполнитьАсинхронно(МойОбъект, "МойМетод", Параметры);
// МойКласс.os
Функция МойМетод()
Возврат "Это мой метод";
КонецФункции // МойКлассобработчик.os
Процедура МойМетодОбработки(ВозвращаемоеЗначение, ДополнительныеПараметры)
Сообщить(ВозвращаемоеЗначение);
КонецПроцедуры Дальше можно пофантазировать на тему свойства ассинхронности для экземпляра класса в целом. Там еще можно найти применение для аннотаций. |
Пожалуйста, только не нужно не нужен нам этот 1С-ский ад :( |
@artbear твои варианты? Ад от 1С хорош хотя бы тем, что уже придуман. А так, я тоже не в восторге |
да бог с ним с синтаксисом. любая асинхронщина требует event loop,
сохранения контекстов и прочую "не на один вечер разработки" хрень
чт, 7 июн. 2018 г. в 12:30, Sergey Batanov <[email protected]>:
… @artbear <https://github.com/artbear> твои варианты? Ад от 1С хорош хотя
бы тем, что уже придуман. А так, я тоже не в восторге
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#764 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/ABFJKCyri-AIhbCkff-2uADOeUFxP9Nzks5t6PLRgaJpZM4UcR5T>
.
|
@nixel2007 тут замкнутый круг: чтобы взяться за евент луп и остальную хрень, нужна цель. Чтобы появилась цель, нужен синтаксис. Нафига пилить синтаксис, если вопрос не в нём и надо делать евент-луп. Так что будет синтаксис - будет евент-луп. Не будет синтаксиса - не будет ничего |
Хаспада, почитайте сообщение Никиты про event-loop. Вопрос фоновых в оскрипте очень простой - кто будет управлять временем жизни фоновых потоков, когда стартовый поток подошел к концу? Перем ЧтобыБылоВеселее;
Процедура МетодФонового()
Для Сч = 1 По 10 Цикл
ЧтобыБылоВеселее = ЧтобыБылоВеселее + 1;
Приостановить(Сч * 2000);
КонецЦикла;
КонецПроцедуры
Сообщить("Я начало стартового скрипта");
ЧтобыБылоВеселее = 0;
ФоновыеЗадания.Выполнить("МетодФонового");
ФоновыеЗадания.Выполнить("МетодФонового");
Сообщить("Я конец стартового скрипта");
Вопрос - что должно происходить после выполнения строки |
@EvilBeaver Служба/демон :-) Ну или счетчик запущенных дочерних "потоков" и завершать, только когда счетчик обнулится (видимо еще какое-то TTL должно быть для принудительной остановки). Фоновые я не совсем могу придумать для чего использовать, а вот про асинхронные вызовы я выше написал. |
@EvilBeaver Механизм сокетов. |
@arkuznetsov @khorevaa надо ответить на прямой вопрос:
варианты навскидку:
|
У меня так получилось |
@khorevaa А вот отладка со всем этим будет еще веселее чем в типовых 1С. :-) |
Основной процесс должен ждать пока не истечет TTL, потом гасить дочерние. |
@arkuznetsov кому надо отладит. Все развивается в усложнение... |
Ок, идея с TTL, в принципе, мне нравится. А теперь вопрос с разделяемыми ресурсами. Меня бы устроил вариант, как в 1С - когда фоновое изолировано и параметры в него передаются сериализацией (глубокой копией). Но в случае с односкриптом, боюсь, этого будет мало. Глобальные ресурсы все равно существуют, в том числе и в подключенных пакетах. |
@EvilBeaver Ты про то, что всем потокам будет доступно все, что есть в контексте скрипта и попытки менять одни и те же объекты/переменные? Я бы предпочел такое запретить и изолировать контексты потоков, т.е. там должно быть доступнто, что было явно задано. Ну и все что явно задано передавать глубокой копией, без возможности доступа из породившего потока. |
@arkuznetsov подключенные библиотеки - они явно заданы? Их модули с глобальными переменными? |
@dmpas Да, тут источник "феерических" глюков, а их нельзя как-нить сделать read-only для дочерних потоков? Ну или изолировать контексты (что, как мне кажется, существенно сложнее). |
вот так точно не стоит делать. Иначе, во-первых, смотря в код ни фига не понятно, как он отработает (хоть вводи &НаКлиенте да &НаСервере !), во-вторых, дочерние потоки таким образом по большому счёту лишаются возможности использовать библиотеки. Или библиотеки делать с расчётом на то, что будет выполняться в разном контексте. - Везде сплошные затыки. |
@dmpas Это я с точки зрения упростить задачу, а не решать сразу в общем виде. |
@arkuznetsov собственно, любое разделяемое состояние в любом его виде. Это может быть глобальная переменная, это может быть ссылка на какой-то объект, с которым работают сразу в двух потока. |
@dmpas С этим как раз поможет глубокое копирование. Или ты против такого подхода? Или ты про объекты, на которые ссылаются глобальные переменные? |
@arkuznetsov да, на объекты могут ссылаться глобальные переменные или какой-нибудь шарповый код в движке или компонентах |
@dmpas А полностью контексты изолировать возможно? |
@arkuznetsov да, но это равносильно запуску отдельного процесса. |
@dmpas А с отдельным процессом можно callback организовать в родительский процесс? Может тогда так и надо делать? Т.е. условно "ВыполнитьАссинхронно()" из моего примера выше, будет создавать отдельный процесс и копировать контекст. |
@arkuznetsov ну, сейчас у процесса можно работать с потоком ввода и вывода. То есть, при желании, обратки можно сделать - и всё это без доработок движка, по идее. |
@dmpas А вот тут можно какой-нить пример небольшой? |
@arkuznetsov ну, не совсем в таком виде. Сейчас можно сделать так: |
@dmpas А вот про этот момент поподробнее. Когда смотрит? Где смотрит? |
в коде, в явном виде (то есть, да, без оповещения из-вне), в момент, когда нужен результат. |
В повершеле есть фоновые задания. Мне кажется запуская на них отдельные процессы ванскрипт получится то же самое по сути что в 1С ps Хотя руки еще не дошли попробовать |
Андрей сделал первичную реализацию 1cc24e6 |
и в artbear/1commands#48 есть прототип для фоновых команд |
Хочется функционала фоновых заданий в движке.
Запуск по определенному ключу или процедуре в коде.
п.с. возможно просто добавление многопоточности - в каком то виде
The text was updated successfully, but these errors were encountered: