Python模块线程作为日志记录与日志记录

时间:2014-02-05 11:35:52

标签: python multithreading module daemon

我正在尝试在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

2 个答案:

答案 0 :(得分:0)

将其设为deamon意味着主应用程序关闭后,后台线程将立即死亡。您的代码“按原样”工作,只需在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()

答案 1 :(得分:0)

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

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

在教程中有一些错误,但阅读评论; - )