在 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 容器中使用扭曲的词的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 cv2.fisheye.undistortPoints 将扭曲空间中的点转换为未扭曲空间中的点?