如果我使用同步工作者和Gunicorn的工作人员我的应用程序是否是线程安全的?

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

我是正确的理解,如果我使用默认工作者类型(同步),那么如果应用程序因任何原因阻塞,比如在等待数据库查询的结果时,aaociated工作进程将无法处理任何进一步的请求这次?

我正在寻找一个在我的应用程序代码中不需要太多特殊编码的模型。我知道有两种异步工作者类型,gevent和gthread,可以解决这个问题。这两者有什么区别,我的应用程序是否需要线程安全才能使用这些?

更新 - 我做了一些关于gevent的阅读它似乎通过猴子修补std库函数工作所以我认为在一般数据库查询的情况下它可能不会修补我正在使用的任何数据库库如果我需要编程我的应用程序,以便在我等待数据库时协同控制。它是否正确?

python gunicorn
1个回答
0
投票

如果使用线程,则必须编写应用程序以表现良好,例如通过始终使用锁来协调对共享资源的访问。

如果您使用事件(例如gevent),那么您通常不需要担心访问共享资源,因为您的应用程序实际上是单线程的。

回答你的第二个问题:如果你使用一个纯python库来访问你的数据库,那么gevent的猴子补丁应该成功地渲染该库非阻塞,这就是你想要的。但是如果你使用Python包装的C库,那么猴子修补是没有用的,你的应用程序将在访问数据库时阻塞。

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