I have a Python function which
generates an image once it is
accessed. I can either invoke it
directly upon a HTTP request, or do it
asynchronously using Gearman. There
are a lot of requests.
In this case "better" would mean the
best speed / load combinations. The
image generation example is
symbolical, as this can also be
applied to Database connections and
other things.
你不应该在你的请求内这样做,因为那样你就不能控制(你的服务器可能会过载)。所有大型站点都使用消息队列进行脱机处理。在
你应该异步进行,因为这样做除了加快网站速度外,最有说服力的原因是,如果你处于高负载状态,你可以限制你的队列。您可以先执行优先级最高的任务。在
我相信forking processes很贵。我将创建两个工作进程(可能在进程内部执行一些线程处理)来处理负载。我可能会使用redis,因为它是fast,actively developed(antirez/pietern几乎每天都提交),并且有一个非常good/stable python client library。blpop/rpush可用于模拟队列(作业)
如果你的程序在解释器中是CPU限制的,那么产生多个线程实际上会减慢结果,即使有足够的处理器来运行它们。这是因为GIL(全局解释器锁)一次只允许一个线程在解释器中运行。在
如果一个库中的多个线程不能有效地使用它,那么它很可能在C中无法有效地使用。在
如果你自己生成线程,你需要确保不要一次创建太多的-10K线程将是一个坏消息-所以你需要设置一个工作队列,线程从中读取,而不是仅仅在循环中生成它们。在
如果我这样做的话,我会使用标准的多处理模块。在
相关问题 更多 >
编程相关推荐