在 WSGI 容器中使用扭曲的词

Posted

技术标签:

【中文标题】在 WSGI 容器中使用扭曲的词【英文标题】:Using twisted words in a WSGI container 【发布时间】:2011-10-29 09:44:54 【问题描述】:

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

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

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

感谢您的任何回复。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于在 WSGI 容器中使用扭曲的词的主要内容,如果未能解决你的问题,请参考以下文章

通过鱼眼扭曲功能扭曲直线并在图像中正确绘制

Google Maps api v3 工具:视觉扭曲?

如何使用 cv2.fisheye.undistortPoints 将扭曲空间中的点转换为未扭曲空间中的点?

如何使用javascript修复HTML画布对象中的扭曲/扭曲和剪切图像?

SVG路径的透视变换(四角扭曲)

亚美尼亚语和高棉语字符扭曲了 React Native / iOS 中的垂直文本对齐方式