Stackless Python - 分析单个微线程的执行时间

发布于 2024-12-22 20:22:25 字数 369 浏览 3 评论 0原文

在我用 Stackless Python 编写的服务器中,我偶尔会在 5-10 秒的时间内出现 CPU 使用率大幅上升的情况。这种情况偶尔发生,所以我很难追踪它。

我已经使用 cProfile 来尝试确定这些峰值来自何处,但 cProfile 给出了每个函数所花时间的总体情况。我真正想知道的是CPU峰值是否是由于单个tasklet中发生的某些处理(并导致其他tasklet停止),或者是否有多个tasklet进行大量处理(即,当每个tasklet变得活跃时,每个tasklet都在做)很多工作)。

有没有一种方便的方法可以连接到 Stackless Python 中的调度程序,以便我可以添加一些计时代码?换句话说,是否有一个函数在微线程变为活动状态以及变为非活动状态时被调用,我可以挂钩?

In my server written in Stackless Python, I occasionally am getting large spikes in CPU usage for 5-10 seconds durations. This happens sporadically so I'm having trouble tracking it down.

I've used cProfile to try and determine where these spikes are coming from but cProfile gives an overall picture of where time is being spent per function. What I would really like to know is whether the CPU spikes are due to some processing occurring in a single tasklet (and stalling other tasklets) or if there are multiple tasklets doing a lot of processing (ie. as each becomes active, each is doing a lot of work).

Is there a convenient way to hook into the scheduler in Stackless Python so that I can add some timing code? In other words, is there a function that is invoked when a tasklet becomes active and when it becomes inactive that I can hook into?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

琉璃梦幻 2024-12-29 20:22:25

我还没有找到一个显式函数来挂钩微线程阻塞/恢复时的情况,但由于 Channel.receive() 通常是在阻塞/恢复发生时进行的,所以我挂钩了每次发生的情况。

I haven't found an explicit function to hook into when a tasklet blocks/resumes, but since Channel.receive() is typically when the block/resume occurs, I hooked into every occurrence of that happening.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文