Size: a a a

Clojure — русскоговорящее сообщество

2021 November 04

AD

Alexander Doroshenko in Clojure — русскоговорящее сообщество
вот сюда что надо дописать?
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
сопсна, где в первом примере print - там делай то, что надо
источник

AD

Alexander Doroshenko in Clojure — русскоговорящее сообщество
спасибки.попробую
источник

AD

Alexander Doroshenko in Clojure — русскоговорящее сообщество
так. еще раз. проблема не в том, чтобы экранировать блокирующий вызов, а нооборот, чтобы не выключать программу пока набор этих экранированных вызовов работает
источник

ЕС

Евгений Соловьев... in Clojure — русскоговорящее сообщество
Создать промис и дерефнуть?
https://clojuredocs.org/clojure.core/promise
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Я вот так делаю https://github.com/serioga/webapp-clojure-2020/blob/master/src/app/main.clj

Запускаю потом с помощью jsvc
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Классно! Я тоже возьму на заметку, многое понравилось!
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Дожидаться потоков не нужно. Джава устроена так, что если главный тред отработал, то перед тем как выйти, он ждет завершения других тредов. Когда они остановятся, главный тред выйдет
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Другое дело, что запущенные задачи должны выставлять какие-то способы управлять ими. Например, запуск задачи отдает объект с методом stop
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Вроде бы не ждёт JVM завершение тредов, кроме главного. И если главный закончился, а остальные треды не запущены с флагом daemonize, то все они погибнут. Если я ничего не путаю.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Вроде бы пишут так:

When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:

- The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.

- All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
то есть главнй тред ждет остальные не-deamon треды, пока они не завершатся
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
Ждёт, поэтому можно программу с mount запустить просто через mount/start, и какой-то апи будет вечно работать
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
Собственно, бот вроде ничем от апи не отличается, если на вебхуках
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
В общем, ждать ничего не нужно. Для примера можно сделать уберджар, который в main запускает вечный тред со слипом. И тогда джарник будет выполняться вечно
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
У нас проекты устроенты так: в main запускается система и вдобавок вешаются обработчики сигналов. Если пришел sigterm, система выключается и главный тред выходит
источник

AD

Alexander Doroshenko in Clojure — русскоговорящее сообщество
Спасибо за советы. А зачем обработчик сигналов переопределить. Вроде по описанию он делает стандартные действия, или вы там ещё культурно закрывает ресурсы?
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
Думаю для красивого выхода, чтобы все аккуратно повыключать
источник

AD

Alexander Doroshenko in Clojure — русскоговорящее сообщество
В своей жизни всего раз сигналы переопределял, а потом искренне удивился когда этот код под виндой собрался
источник