Нет, вам не нужно ничего подклассифицировать. Вам просто нужно вызвать ioloop.IOLoop.current()
, чтобы получить текущий исполняемый экземпляр ioloop, а затем вызвать call_at
для запуска вашей функции.
Однако, вместо call_at
, проще использовать call_later
.
Пример с помощью call_later
:
ioloop.IOLoop.current().call_later(delay=10, callback=your_function)
# Tornado will run `your_function` after 10 seconds.
Если вы все еще хотите использовать call_at
, вот пример:
current_time = ioloop.IOLoop.current().time()
call_time = current_time + 10
ioloop.IOLoop.current().call_at(when=call_time, callback=your_function)
# Tornado will run `your_function` after 10 seconds
UPDATE:
Чтобы запустить функцию в определенное время, вы можете сделать это:
from datetime import datetime
# take note of the current time
now = datetime.now()
# create a datetime object of when you want to call your function
call_time = datetime(year=2018, month=7, day=18, hour=14, minute=30)
# find the time difference in seconds between `call_time` and `now`
call_time_seconds = (call_time - now).seconds
ioloop.IOLoop.current().call_later(delay=call_time_seconds, callback=your_function)
# Tornado will run your function at 14:30 on 18 July.
Вместо присоединения к profile_activities
непосредственно присоединитесь к подзапросу, который выбирает все столбцы из profile_activities
, а также к lag()
ed created_at
. Затем вы можете сравнить с created_at
из «предыдущего» действия. В качестве значения по умолчанию для lag()
, которое берется при отсутствии предыдущей активности, используйте '-infinity'
. Поскольку все метки времени больше отрицательной бесконечности, сравнение с карточкой слова created_at
будет работать и в этих случаях.
SELECT w.wordcard_id,
w.profile_id,
w.created_at,
a.activity_id,
a.profile_id,
a.created_at
FROM (SELECT a.activity_id,
a.profile_id,
a.created_at,
lag(a.created_at,
1,
'-infinity') OVER (ORDER BY a.created_at) created_at_lag
FROM profile_activities a) a
INNER JOIN profile_wordcards w
ON w.profile_id = a.profile_id
AND w.created_at > a.created_at_lag
AND w.created_at <= a.created_at
ORDER BY a.activity_id;