Cristian
Cristian

Reputation: 495

How do I run twisted with flask?

I want to be able to run twisted servers on multiple different directories (exp: /example1, /example2...etc), So I thought I'd use flask. Here is what I have so far:

from flask import Flask
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
from twisted.web.proxy import ReverseProxyResource
from twisted.web.resource import Resource

app = Flask(__name__)
@app.route('/example1')
def index():
    return 'My Twisted Flask'

flask_site = WSGIResource(reactor, reactor.getThreadPool(), app)

root = Resource()
root.putChild('my_flask', flask_site)

site_example = ReverseProxyResource('www.example.com', 80, ''.encode('utf-8'))
root.putChild('example1', site_example)

reactor.listenTCP(80, Site(root))
reactor.run()

The only problem is that it doesn't work, I'm not sure what I'm doing wrong. I appreciate any help, thanks!

Upvotes: 5

Views: 2313

Answers (2)

cesartalves
cesartalves

Reputation: 1585

You can use twisted web, as documented on the Flask deploy documentation. Here's how I managed to run a server on my machine:

pip3 install twisted[tls]

export PYTHONPATH=${PYTHONPATH}:${PWD} # exports python path
twistd  web -n --port tcp:5000 --wsgi path-to-your-app-root --logfile log.txt

Though I've had some issues with the server after it's up and running for my particular scenario, this might work for you

Upvotes: 1

Viach Kakovskyi
Viach Kakovskyi

Reputation: 1517

My personal opinion: running Flask in Twisted's reactor isn't a good idea because Twisted's reactor is blocked when a request is processed by Flask.

I think you might be interested in Klein, which provided API similar to Flask, but works on Twisted out of the box: http://klein.readthedocs.io/en/latest/

Another option: I'd take a look into nginx as a reverse proxy for Flask applications instead of Twisted. nginx runs in a separate process and isn't blocked while a request is processed by Flask. https://www.nginx.com/resources/admin-guide/reverse-proxy/

Upvotes: 6

Related Questions