Python和PHP的任意同步日志策略

2024-05-23 18:04:21 发布

您现在位置:Python中文网/ 问答频道 /正文

情况是这样的:我们有一堆python脚本在不断地做事情,最终在mysql中写入数据,我们需要一个日志来分析错误率和脚本性能。

我们还有php前端,它可以与mysql数据交互,我们还需要记录用户的行为,以便我们能够分析他们的行为,并计算一些评分函数。 因此,我们考虑为每种情况创建一个mysql表(一个用于“python脚本”日志,另一个用于“用户操作”日志)。

理想情况下,出于性能和低延迟的原因,我们将异步写入这些日志表。在Python(我们使用的是djangoORM)和PHP(我们使用的是Yii Framework),有没有一种方法可以做到这一点?

有没有更好的方法来解决这个问题?

更新: 对于用户操作(webui),我们现在考虑通过简单的Apache配置将Apache日志和相关会话信息自动加载到mysql中


Tags: 数据方法函数用户脚本apache记录mysql
2条回答

您可以打开一个原始的Unix或网络套接字到日志服务,该服务缓存消息并将其异步写入磁盘或数据库。如果PHP和Python进程是长时间运行的,并且每次执行都会生成许多消息,那么保持一个开放的套接字比同步地发出单独的HTTP/数据库请求更有效。在

你必须将它与附加到文件(打开一次,然后在运行时锁定、查找、写入和解锁,最后关闭)进行比较,看哪个更快。在

在PHP中,只有两种方法可以同步执行任何操作:

  • 分叉进程(需要^{}
  • ^{}一个进程,并通过在命令字符串末尾附加> /dev/null &来释放它(假设是*nix)。在

这两种方法都会导致创建一个新的进程,尽管只是暂时的,因此这是否能够提供任何性能提升是有争议的,并且在很大程度上取决于您的服务器环境-我怀疑这会使情况变得更糟,而不是更好。如果您的数据库负载非常重(因此会使您的速度变慢),则可以通过将日志消息转储到文件中,并使用一个守护程序脚本来爬行以使其进入数据库,从而获得更快的结果—但是,这是否有帮助还有待商榷。在

Python supports multi-threading这让生活变得轻松多了。在

相关问题 更多 >