The apparent requirement to provide class
definitions instead of instances causes very difficult problems. I have two different classes and one of them needs a reference to the other
app = tornado.web.Application([
(r"/fusion.*", FusionListener),
(r"/admin.*", AdminListener),
])
. The AdminListener
needs a reference to the FusionListener since there are internal items needing to be managed. Sending messages is an unacceptable additional complexity here. The current mechanism does not seem to afford that possibility.
What kind of pattern can get around this shortcoming in Tornado?
For my use-case there are both persistent and in-memory state. We have spark
and postgres
repositories for the former. For the latter I had already designed and written the application to have instance-level data structures. But I have gathered that instance attributes on Tornado
launched RequestHandler
/ WebHandler
subclasses are not persistent.
The latter wants to live in a class managing the state: but I am compelled to significantly redraw the boundaries due to this design ot Tornado
. Instead it will be necessary to push everything to global variables. Few would argue this were a preferred design. I will be dumping tornado
as soon as I can get the time.
Not sure what will be the alternative: I already reverted from cherrypy
due to significant limitations of its own: here are a couple of my questions on it
I got through those with some scars but still in one piece. There were additional issues that knocked me out: url's
were not being served, and there was no clear end to the mole whacking. It also generally does not get a lot of attention and has confusing outdated or incomplete documentation. There is plenty of docs - that's why I got started on it: but the holes make for a series of rabbit-chasing episodes.
Flask
and django
have their own issues. It seems finding a functionally adequate but not super heavy weight web server in python
is an illusory target. Not certain yet which framework has the least gotchas.