我们最近切换到Gunicorn使用GEVENT工人.
在我们的网站上,我们有一些需要一段时间才能完成的任务.超过30秒.
我们已经完成了整个芹菜的事情,但这些任务很少运行,以至于不能让芹菜和redis一直运行.我们只是不想那样.我们也不想按需开始芹菜和红葡萄酒.我们想要摆脱它.(我为此感到抱歉,但我想阻止这样的答案:"为什么不使用芹菜,这太好了!")
我说的是执行3000个SQL查询(插入)的任务,这些查询必须一个接一个地执行.这种情况并非经常发生.我们仅限于同时运行其中两项任务.他们应该花2-3分钟.
现在,我们现在正在做的是利用gevent worker和gevent.spawn任务并返回响应.
我发现生成的线程实际上是阻塞的.一旦返回响应,任务就会开始运行,并且在任务停止运行之前不会处理任何其他请求.任务将在30多岁后被枪杀timeout.为了防止这种情况,我time.sleep()在每个其他SQL查询之后使用,因此服务器有机会响应请求,但我不觉得这是重点.
我们运行gunicorn,django并使用gevent.描述的行为发生在我的开发环境中并使用1 gevent worker.在生产中,我们也只运行一名工人(现在).此外,在任务阻塞时,运行2名工作人员似乎无助于提供更多请求.
谢谢!
我有我的伪接口,我实现了几次.每个实现都应该存储一个基本上定义文件路径(模板)的变量.因为这些类是由工厂生成的,所以我不知道会出现哪个子类,因此,我想通过实例方法访问类变量.
这并不会造成问题,但是,当我从我的Interface继承时,我不想getHidden()多次实现该方法(在下面).但是把它称之为它所记录的方式,总会隐藏起来.
class MySuperInterface(object):
# class Variable
__much = "hidden"
# instance method
def getHidden(self):
print self.__class__.__much
class MySub(MySuperInterface):
__much = "this is different per subclass!"
def soTroublesome(self):
print self.__class__.__much
Run Code Online (Sandbox Code Playgroud)
执行
>>> sub = MySub() # I don't know this class!
>>> sub.getHidden()
hidden
>>> sub.soTroublesome()
this is different per subclass!
Run Code Online (Sandbox Code Playgroud)
那么,我如何实现getHidden()访问实例的类'classvariable.我知道,我检查过的信息是可用的dir(),但我不知道如何访问它.同样,我不想最终得到一个类/静态方法,因为我不知道从我的工厂出来的类!
谢谢!