1

常にバックグラウンドで実行したい Python スクリプトがあります。アプリケーションが行うことは、Oracle データベースにアクセスして、ユーザーに表示するメッセージがあるかどうかを確認し、ある場合は pynotify を使用して通知を表示することです。

Timer オブジェクトを使用してみましたが、選択した時間の後にのみメソッドを呼び出します。選択時間以降は毎回呼び出してほしい。

if __name__ == '__main__':
  applicationName = "WEWE"
    # Initialization of the Notification library
  if not pynotify.init(applicationName):
   sys.exit(1)         

  t = threading.Timer(5.0, runWorks)
  t.start() 

この作業を行うと、より良い方法はありますか?

 if __name__ == '__main__':
      applicationName = "WEEWRS"
        # Initialization of the Notification library
      if not pynotify.init(applicationName):
       sys.exit(1)         
      while True:
       t = threading.Timer(5.0, runWorks)
       t.start() 

しかし、それは私に別の問題をもたらしました。

thread.error: can't start new thread

(r.py:12227): GLib-ERROR **: creating thread 'gdbus': Error creating thread: Resource temporarily unavailable
4

2 に答える 2

2

文字列の作成を減らす問題を解決しました。以下のエラー -

thread.error: can't start new thread

(r.py:12227): GLib-ERROR **: creating thread 'gdbus': Error creating thread: Resource temporarily unavailable

リソースが不足しているときに発生します。以下、修正したコードです。

if __name__ == '__main__':
  applicationName = "DSS POS"
  # Initialization of the Notification library
  if not pynotify.init(applicationName):
   sys.exit(1)         

  flagContinous = True
  timeout = 5
  # This loop will continously keep the application in the background
  while flagContinous:
   time.sleep(timeout)
   runWorks()
  # After 30 seconds, "hello, world" will be printed  

スクリプトが複数回実行されないように、ロック ファイルも使用しました。

pid = str(os.getpid())
  pidfile = "/tmp/mydaemon.pid"

  # If we have a lock already block the program
  if os.path.isfile(pidfile):
    print "%s already exists, exiting" % pidfile
    sys.exit()
  else:
    file(pidfile, 'w').write(pid)
  # Do all the work
  applicationName = "DSS POS"
  # Initialization of the Notification library
  if not pynotify.init(applicationName):
   sys.exit(1)         

  # Controls for the application
  flagContinous = True
  timeout = 5
  # This loop will continously keep the application in the background
  while flagContinous:
   time.sleep(timeout)
   runWorks()
  # After 30 seconds, "hello, world" will be printed  

  # Release the file
  os.unlink(pidfile)
于 2012-06-13T07:20:39.933 に答える
1

次の単純なデーモン スクリプトを使用することをお勧めします: http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

それは非常に良い仕事をします!

于 2012-06-13T08:24:28.247 に答える