5

我在 wsgi 容器中运行 django。显然,我在我的 django 代码中避免了所有带有延迟的异步内容,因为根据文档,在 WSGI 应用程序中不允许使用扭曲的异步功能。

但是,我想在我的 WSGI 应用程序中使用 twisted.words 将请求发送到 jabber 服务器。这算作异步的东西还是我可以在我的应用程序中使用它?如果我向 WSGI 内的 xmpp 服务器发送twisted.words jabber 请求会发生什么?

此外,我还有一个更笼统的问题。有什么理由扭曲的 WSGI 容器是多线程的(它是多线程的吗?),因为众所周知,python 的 GIL 只会降低带有线程的脚本的整体性能。

感谢您的任何回复。

4

1 回答 1

0

要在 Twisted 中从另一个线程(非 I/O 线程,即 WSGI 应用程序线程)调用主事件循环(I/O 线程)中的函数,您可以使用reactor.callFromThread(). 如果您想等待结果,请使用threads.blockingCallFromThread(). 因此,您可以调用使用twisted.wordsSee Using Threads in Twisted 的函数。

要确定 wsgi 容器是否是多线程检查wsgi.multithread,它应该为扭曲容器返回 true。

WSGI 容器是多线程的,可以一次支持多个请求(这不是绝对必要的,但使用现有软件可以让生活更轻松)。否则(如果你不使用其他方法来解决它)你的整个服务器阻塞,而你的请求处理程序等待来自数据库的答案。有些人发现编写请求处理程序更简单,如果并发请求不多,则不必担心阻塞其他请求。

Python 中在性能很重要时执行 CPU 密集型作业的函数可以使用在计算期间释放 GIL 或将它们卸载到其他进程的库。webapps中频繁出现的网络、磁盘I/O通常比CPU慢很多。

于 2011-10-30T01:22:36.023 回答