为什么我的 Python 守护进程在睡眠时占用我所有的 CPU?

发布于 2024-08-09 11:02:56 字数 572 浏览 4 评论 0原文

我正在使用这个食谱:http://code.activestate.com/recipes/278731/ 在 Ubuntu 服务器上。

我创建了一个这样的守护进程实例:

class MyDaemon(Daemon):
    def run(self):
        while True:
            try:      
                do_my_data_processing()
            except MySQLdb.OperationalError:
                # Sleep an extra 30 seconds if database is away.
                time.sleep(30)
            time.sleep(30)

问题是,即使在休眠时,守护进程也会占用几乎所有可用的 CPU 功率。

我做错了什么?

I'm using this recipe: http://code.activestate.com/recipes/278731/ on an Ubuntu server.

I make a daemon instance like this:

class MyDaemon(Daemon):
    def run(self):
        while True:
            try:      
                do_my_data_processing()
            except MySQLdb.OperationalError:
                # Sleep an extra 30 seconds if database is away.
                time.sleep(30)
            time.sleep(30)

The problem is that even while sleeping the daemon takes up almost all available CPU power.

What am I doing wrong?

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

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

发布评论

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

评论(2

南渊 2024-08-16 11:02:56

发布的代码看起来是正确的。你的错误一定是在其他地方。将 print 语句放入循环中以确保它确实休眠。

The posted code looks correct. Your error must be somewhere else. Put a print statement into the loop to make sure that it does sleep.

白馒头 2024-08-16 11:02:56

原来守护进程没有睡觉。它循环播放,每回合之间没有休息 30 秒。谢谢亚伦。

我通过将代码更改为以下内容来修复它:

class MyDaemon(Daemon):
    def run(self):
        while True:
            try:      
                do_my_data_processing()
                time.sleep(30)
            except MySQLdb.OperationalError:
                # Sleep an extra 30 seconds if database is away.
                time.sleep(30)

Turns out the daemon wasn't sleeping. It was looping without sleeping 30 seconds between every turn. Thanks Aaron.

I fixed it by changing my code to this:

class MyDaemon(Daemon):
    def run(self):
        while True:
            try:      
                do_my_data_processing()
                time.sleep(30)
            except MySQLdb.OperationalError:
                # Sleep an extra 30 seconds if database is away.
                time.sleep(30)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文