如何通过Twisted的Web服务器正确地服务一个Django应用?

问题描述 投票:0回答:1

我正在构建一个系统,该系统由一些组件组成,这些组件将在自己的进程或线程中运行。它们需要相互通信。其中一个组件是一个Django应用,与Django应用的内部通信不会通过HTTP完成。在寻找网络库的时候,我发现了Twisted(很厉害的库!),阅读它的文档,我发现Twisted 实现WSGI规范 也是,所以我想其 网络服务器 可以为WSGI应用提供服务,比如Django。根据文档,我用下面的脚本来服务Django应用。

from twisted.web import server
from twisted.internet import reactor, endpoints
from twisted.web.wsgi import WSGIResource
from twisted.python.threadpool import ThreadPool
from mysite.wsgi import application as django_application

# Create and start a thread pool to handle incoming HTTP requests
djangoweb_threadpool = ThreadPool()
djangoweb_threadpool.start()
# Cleanup the threads when Twisted stops
reactor.addSystemEventTrigger('after', 'shutdown', djangoweb_threadpool.stop)

# Setup a twisted Service that will run the Django web app
djangoweb_request_handler = server.Site(WSGIResource(reactor, djangoweb_threadpool, django_application))
djangoweb_server = endpoints.TCP4ServerEndpoint(reactor, 8000)
djangoweb_server.listen(djangoweb_request_handler)

reactor.run()

把它保存在一个文件中,比如 runserver.py 在同一目录的 manage.py您可以通过运行以下命令来启动WSGI服务器 python runserver.py. 我做了一个django视图,做了一个阻止调用到 time.sleep() 来测试,工作正常。因为是多线程,所以没有阻止其他请求。所以我认为它与同步的Django代码配合得很好。我可以再设置一个自定义协议的服务作为内部通信的网关。1)该脚本是否能正确加载Django应用?它的工作方式和其他WSGI服务器如gunicorn和uwsgi一样吗?2)那个线程会不会并行运行?

python django multithreading twisted wsgi
1个回答
0
投票

hendrix 是一个可以让你通过twisted运行django的项目。如果需要的话,它看起来可以运行其他的twisted服务(https:/hendrix.readthedocs.ioenlatestdeploying-other-services。).

如果你正处于发展的初期,可以考虑一下 klein. 虽然它更类似于flask而不是django。

© www.soinside.com 2019 - 2024. All rights reserved.