我的程序是 ICAPServer(与 httpserver 类似),它的主要工作是从客户端接收数据并将数据保存到 DB。
有两个主要步骤和两个线程:
- ICAPServer 从客户端接收数据,将数据放入队列(50kb <1ms);
- 另一个线程从队列中弹出数据,并将它们写入 DB SO,如果第二步太慢,队列将用这些数据填满内存。
想问问大家有没有什么建议...
我的程序是 ICAPServer(与 httpserver 类似),它的主要工作是从客户端接收数据并将数据保存到 DB。
有两个主要步骤和两个线程:
想问问大家有没有什么建议...
很难确定,但也许在这种情况下使用两个进程而不是线程会有所帮助。由于 Python 具有全局解释器锁 (GIL),因此它的作用是在任何时候都只允许任何一个线程执行 Python 指令。
围绕流程设计的系统可能具有以下优点:
对队列中的数据量设置上限?
注意事项:在进行优化之前,进行一些良好的测量和分析非常重要。
也就是说,我敢打赌第二步中缓慢的部分是数据库通信;您可以尝试分析 SQL 语句及其执行计划。然后对其进行优化(这是 SQLAlchemy 的特性之一);如果仍然太慢,请检查数据库优化。
当然,瓶颈可能在完全不同的地方。在这种情况下,您仍然有机会使用 C 代码、专用网络或更多线程进行优化——仅举三个可能的完全不同类型的优化示例。
另一点:由于 I/O 操作通常会释放 GIL,您也可以尝试通过添加另一个读取器线程来提高性能 - 我认为这可能是一个更便宜的解决方案。