Как добавить неблокирующий таймер для sherrypy?

Как добавить к серверу cherrypy независимую неблокирующую сервер функцию, например

def foo_every_sec()
   print(time.time())

периодически, например, каждую секунду, вызываемую таймером? Повторюсь, желательно чтобы на время работы таймера и функции не блокировалась работа сервера, и минимизировать, а лучше избежать снижения его производительности. Сервер

import cherrypy

class Root(object):
    @cherrypy.expose
    def index(self):
        return "Hello World!"

cherrypy.quickstart(Root())

Ответы (1 шт):

Автор решения: GreenX5

Вот такое решение, сервер (классический sherrypy + ws4py) вынесен в отдельный модуль websoct. daemon=False корректнее завершает потоки в данном случае. На Tkinter можно повесить контроль и управление сервером и прочий интерфейс. Все работает хорошо.

import time, threading, cherrypy
from tkinter import *

def server():
    import websoct

def sender():
    global aft
    cherrypy.engine.publish('websocket-broadcast', str(int(time.time())))
    aft = root.after(1000,sender)

def on_closing():
    root.after_cancel(aft)
    cherrypy.engine.exit()
    root.destroy()

if __name__ == '__main__':
    root=Tk();
    root.protocol("WM_DELETE_WINDOW",on_closing)
    aft = root.after(1000, sender)
    t = threading.Thread(target=server, name="My Server", daemon=False)
    t.start()
    root.mainloop()
    t.join()
→ Ссылка