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

时间:2017-12-13 04:58:53

标签: python gunicorn

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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