2009-11-02 58 views
0

我在Ubuntu服务器上使用这个配方:http://code.activestate.com/recipes/278731/为什么我的Python守护进程在睡眠时耗尽了我所有的CPU?

我做一个守护进程的实例是这样的:

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。

我在做什么错?

+2

...假设守护进程有效地睡觉,而不是停留在你的“do_my_data_processing()”函数。 – jldupont 2009-11-02 13:11:53

+0

您的缩进看起来不正确 - 这只是本文中的一个格式问题,或者您的time.sleep(30)可能在while循环之外? – 2009-11-02 13:12:34

+0

固定缩进,现在应该是。我确信守护进程正在睡觉。 – Hobhouse 2009-11-02 13:20:07

回答

3

发布的代码看起来正确。你的错误必须在其他地方。将一条print语句放入循环中以确保它可以睡眠。

0

原来守护进程没有睡眠。它在每回合之间没有睡眠30秒的情况下循环。谢谢Aaron。

我固定它通过改变我的代码如下:

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) 
+0

威武怪异 – aehlke 2010-07-19 01:14:20