【发布时间】:2013-08-31 19:06:30
【问题描述】:
我有一个应用程序通过 TCP 连接接收数据并将其写入 postgres 数据库。然后我使用 django web 前端为这些数据提供一个 gui。由于 django 提供了有用的数据库访问方法,我的 TCP 接收器也使用 django 模型来写入数据库。
我的问题是我需要使用分叉的 TCP 服务器。分叉会导致子进程和父进程共享句柄。我读过 Django 不支持分叉,并且确实共享数据库连接会导致问题,例如这些例外:
DatabaseError: SSL 错误:解密失败或坏记录 mac
InterfaceError: 连接已关闭
让分叉的 TCP 服务器工作的最佳解决方案是什么?
- 我能否确保分叉的进程使用自己的数据库连接?
- 我应该查看其他模块以写入 postgres 数据库吗?
【问题讨论】:
-
分叉到底解决了什么问题?
-
对我来说主要原因是速度和弹性。该服务器正在处理大量数据,并且线程切换是一分钟的限制。多进程意味着没有 GIL 问题(我知道套接字操作在阻塞时会释放 GIL,但后处理一次只能在一个线程中发生)。
-
除非你的 CPU 严重受限,否则我会通过 eventlet 或 gevent 使用绿色线程。 eventlet 和 gevent 都具有使 Postgres 能够很好地处理许多并发连接的机制。这是一个选择吗?
标签: python django postgresql