python程序选择

时间:2009-07-12 14:54:02

标签: python sqlalchemy twisted

我的程序是ICAPServer(类似于httpserver),它的主要工作是从客户端接收数据并将数据保存到数据库。

有两个主要步骤和两个主题:

  1. ICAPServer从客户端接收数据,将数据放入队列(50kb <1ms);
  2. 另一个线程从队列中弹出数据,并将它们写入DB SO,如果第二步太慢,队列将用这些数据填满内存。
  3. 想知道是否有人有任何建议......

3 个答案:

答案 0 :(得分:2)

很难肯定地说,但是在这种情况下,使用两个进程而不是线程可能会有所帮助。由于Python具有全局解释器锁(GIL),因此它的作用是只允许任何一个线程随时执行Python指令。

围绕流程设计系统可能具有以下优势:

  • 更高的并发性,尤其是在多处理器计算机上
  • 吞吐量更高,因为您可能会生成多个队列使用者/数据库编写器进程来分散工作。虽然,如果真的是数据库是瓶颈而不是写入数据库的过程,那么这种影响可能是最小的。

答案 1 :(得分:0)

对队列中的数据量设置上限?

答案 2 :(得分:0)

一个注意事项:在进行优化之前,获得一些好的测量和分析非常重要。

那就是说,我敢打赌,第二步的缓慢部分是数据库通信;您可以尝试分析SQL语句及其执行计划。然后优化它(它是SQLAlchemy的features之一);如果它仍然太慢,请检查数据库优化。

当然,瓶颈可能处于一个完全不同的地方;在这种情况下,您仍然有机会使用C代码,专用网络或更多线程进行优化 - 只是为了给出完全不同类型的优化的三个可能示例。

另一点:由于I / O操作通常会释放GIL,您还可以通过添加另一个读取器线程来尝试提高性能 - 我认为这可能是一个更便宜的解决方案。