【问题标题】:Python module threading as daemon with loggingPython模块线程作为带有日志记录的守护进程
【发布时间】:2014-02-05 11:35:51
【问题描述】:

我正在尝试在 Debian 7 下的 Python 2.7 中创建一个模块 init 和一个模块 mydaemon

模块init检查数据库连接等需求,然后mydaemon在一个线程中运行,使用数据库做事并写入日志文件。

设置线程守护进程时的问题是日志记录和函数调用失败。 但是如果线程不是守护进程工作正常......

我哪里错了,或者有什么更好的方法?

init.py

import mydaemon, threading

print 'start'
t = threading.Thread( target = mydaemon.start, args = () )
t.daemon = True # error here
t.start()

mydaemon.py

import logging

def start():
   work()
   return

def work():
   logging.basicConfig( filename = 'mylog.log', level = logging.DEBUG )
   logging.info('foo log')
   print 'foo console' 
   return

【问题讨论】:

    标签: python multithreading module daemon


    【解决方案1】:

    我的拼贴找到了另一种使用外部守护程序模块(python-daemon)的方法

    http://www.gavinj.net/2012/06/building-python-daemon-process.html

    在教程中有一些错误但阅读 cmets ;-)

    【讨论】:

      【解决方案2】:

      将其设置为守护进程意味着后台线程会在主应用程序关闭后立即终止。您的代码按原样“工作”,只需在 init.py 中添加一个暂停来模拟此行为:

      ...
      t.start()
      
      import time
      time.sleep(1)
      

      http://pymotw.com/2/threading/#daemon-vs-non-daemon-threads 对此进行了更详细的讨论。

      解决此问题的简单方法是加入线程。

      import mydaemon, threading
      
      print 'start'
      t = threading.Thread( target = mydaemon.start, args = () )
      t.daemon = True # error here
      t.start()
      t.join()
      

      【讨论】:

      • 您好,日志仍然失败,但文件已创建。
      • 啊,抱歉,在非 debian 的 windows 系统上尝试了这个。问题是当它作为一个线程制作时,一旦主程序死亡,线程就会死亡。所以在主程序存在之前没有足够的时间写入文件。我会更新我的答案。
      • 简洁而有用的起点(德语)是thomaschristlieb.de/…Auto-Translatation
      猜你喜欢
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多