Как добавить неблокирующий таймер для 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()