我正在尝试在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
答案 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
在教程中有一些错误,但阅读评论; - )