Найти - Пользователи
Полная версия: Управление Tornado web-сервером через PyQt
Начало » Python для экспертов » Управление Tornado web-сервером через PyQt
1
ActionNum
Уважаемые форумчане, нужно помощь! При попытке написания интерфейса к управлению веб-сервером на торнадо столкнулся со следущими проблемами:
1) Сначала запускал сервер в отдельном процессе и проблем никаких не было, все коррктно завершалось при os.kill(pid), сервер освобождал занимаемый порт, но когда стал вопрос о прикручивании гуи нужно было возвращать логи в интерфес, а так как у процесса другое адресное пространстово, то через механизм сигналов/слотов данные получать не удавалось
2) перешел к потокам и тут столкнулся с другой проблемой не могу корректно завершить работу tornado (не особождает занимаемый порт)
Помогите пожалуйста как стартавать и останавливать торнадо в отдельном потоке:
 import threading
import tornado.ioloop
import tornado.web
import time
 
 
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world!\n")
 
def start_tornado(*args, **kwargs):
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    application.listen(8888)
    print("Starting Torando")
    tornado.ioloop.IOLoop.instance().start()
    print("Tornado finished")
 
def stop_tornado():
    ioloop = tornado.ioloop.IOLoop.instance()
    ioloop.add_callback(ioloop.stop)
    print("Asked Tornado to exit")
 
def main():
 
    t = threading.Thread(target=start_tornado)
    t.start()
 
    time.sleep(5)
 
    stop_tornado()
    t.join()
    time.sleep(10)
    t = threading.Thread(target=start_tornado)
    t.start()
 
    time.sleep(5)
 
    stop_tornado()
    t.join()

Traceback:
Starting Torando
Asked Tornado to exit
Tornado finished
Exception in thread Thread-2:
Traceback (most recent call last):
File “/usr/lib/python3.5/threading.py”, line 914, in _bootstrap_inner
self.run()
File “/usr/lib/python3.5/threading.py”, line 862, in run
self._target(*self._args, **self._kwargs)
File “/home/leming/Documents/PycharmProject/berkut_gui/modules/ProxyServer/proxyServer.py”, line 16, in start_tornado
application.listen(8888)
File “/home/leming/.local/lib/python3.5/site-packages/tornado/web.py”, line 1943, in listen
server.listen(port, address)
File “/home/leming/.local/lib/python3.5/site-packages/tornado/tcpserver.py”, line 142, in listen
sockets = bind_sockets(port, address=address)
File “/home/leming/.local/lib/python3.5/site-packages/tornado/netutil.py”, line 197, in bind_sockets
sock.bind(sockaddr)
OSError: Address already in use
vic57
не знаю зачем вам это, на гите есть типа такого:
https://gist.github.com/mivade/35cbd270f49e1ca7ba7d
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB