slav0nic's blog

Заметки о python, linux и других занимательных вещах

Создание потоков в webpy приложениях

Может кому-то и пригодится. Столкнулся с необходимостью написания скрипта для мониторинга серверов. Основное приложение - выводит результат мониторинга, а дополни тельный поток по таймеру собирает информацию. В webpy есть пару ф-ций для подобных целей: декоратор @web.background() для выполнения "долговыполняемых" ф-ций и web.load() который разрешает создавать тред в приложении (как написано в доках "Loads a new context for the thread.", хз как по-русски сказать). web.load() вызывается до создания треда. Простой пример, выводящий время, время проверяется раз в 5 секунд:
  1. import web
  2. import threading
  3. import time
  4.  
  5. def check_time():
  6.     result = ""
  7.     global result
  8.     while 1:
  9.         result = time.strftime("%H:%M:%S", time.localtime())
  10.         print "result updated"
  11.         time.sleep(5)
  12.  
  13. urls = (
  14.          "/", "main_app"
  15.    )
  16.  
  17. class main_app:
  18.     def GET(self):
  19.         yield result
  20.  
  21. web.load()
  22. checker = threading.Thread(target=check_time,name='check_time_thrd')
  23. checker.setDaemon(True)
  24. checker.start()
  25.  
  26. if __name__ == "__main__":
  27.     web.run(urls, globals())Syhi-подсветка кода

web.py