Size: a a a

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

2020 January 22

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
возможно, необходимость в аналоге setInterval сигнализирует об архитектурных ошибках в приложении
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну, если задачу на пальцах описать. Есть endpoint, который отдает список урлов. По каждому урлу надо ходить раз в n секунд и собирать данные. Однако сам список урлов тоже меняется со временем, поэтому на первый endpoint нужно тоже ходить раз в m секунд и обновлять список урлов с данными
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
так это только для cljs надо? или java?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Мне подошёл бы полный аналог setInterval :)
ну а «по тупому» (не задумываясь о последствиях)
  (async/go-loop []
   (async/<! (async/timeout 20000))
   (do
     "Be careful what are you doing here")
   (recur))
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну а «по тупому» (не задумываясь о последствиях)
  (async/go-loop []
   (async/<! (async/timeout 20000))
   (do
     "Be careful what are you doing here")
   (recur))
А тут отмена "подписки" хорошо сработает?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну, если задачу на пальцах описать. Есть endpoint, который отдает список урлов. По каждому урлу надо ходить раз в n секунд и собирать данные. Однако сам список урлов тоже меняется со временем, поэтому на первый endpoint нужно тоже ходить раз в m секунд и обновлять список урлов с данными
это сайт или что?
если никому не нужны собираемые данные, то всё крутится в холостую?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Alexey Golda
так это только для cljs надо? или java?
Мне на Java)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
это сайт или что?
если никому не нужны собираемые данные, то всё крутится в холостую?
api, причем не мое)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
А тут отмена "подписки" хорошо сработает?
если сделаешь управление выходом из цикла, то да
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
по джаве уже подсказывали вроде норм всякие SheduledThreadPool
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Вообще, если интересно, речь идёт о сборе данных с букмекеров по матчам в лайве. Есть урл, который отдает список матчей, которые сейчас идут и на каждый матч есть урл с данными по нему
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Мерси, я прост старался как-то избегать джавы в кложуре)
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
  private final ScheduledExecutorService scheduler =
    Executors.newScheduledThreadPool(1);

  public void beepForAnHour() {
    final Runnable beeper = new Runnable() {
      public void run() { System.out.println("beep"); }
    };
    final ScheduledFuture<?> beeperHandle =
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
    scheduler.schedule(new Runnable() {
      public void run() { beeperHandle.cancel(true); }
    }, 60 * 60, SECONDS);
  }
}

пример из доки
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
ну джавы не всегда нужно избегать
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
вот этот кусок просто переписываешь под себя только меньше выйдет
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Мне почему-то кажется, что если core.async получше понять, то он хорошо тоже должен подойти
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
типа

(let [pool (Executors/newScheduledThreadPool 1 ...)
       task (.scheduleAtFixedRate pool
                          (fn []
                            (dosomething ...))
                          0
                          60
                          TimeUnit/SECONDS)]
...
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
@igrishaev получаю теперь что-то вроде
[true {:status 200 ...}]
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Alexey Golda
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
  private final ScheduledExecutorService scheduler =
    Executors.newScheduledThreadPool(1);

  public void beepForAnHour() {
    final Runnable beeper = new Runnable() {
      public void run() { System.out.println("beep"); }
    };
    final ScheduledFuture<?> beeperHandle =
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
    scheduler.schedule(new Runnable() {
      public void run() { beeperHandle.cancel(true); }
    }, 60 * 60, SECONDS);
  }
}

пример из доки
как оно работает, если run дольше 10 сек выполняется?
источник