我开发了一个python脚本,它设计为无限期运行,主线程填充队列,然后填充该队列中的一系列线程进程项。
如果我从终端会话启动它,它会按预期工作,只要我让终端打开。
如果我使用setsid,nohup启动脚本并退出终端会话,主线程将继续,但所有生成的子线程立即死亡。
为了简单起见,这是我启动的示例代码I(pinched)而不是我的完整脚本。而不是队列我有一个睡眠语句来保持主线程打开:
import threading
import time
from datetime import datetime, date
from dateutil import tz
log_path = '/test_logs/'
class ThreadingExample(object):
def __init__(self, interval=30):
self.interval = interval
thread = threading.Thread(target=self.run, args=())
thread.daemon = True # Daemonize thread
thread.start() # Start the execution
def run(self):
thread_name = threading.current_thread().name
while True:
# Do something
print(thread_name + ' - Doing something imporant in the background')
time_now = datetime.now().replace(tzinfo=tz.tzlocal())
date_now = time_now.strftime("%Y-%m-%d")
f = open(log_path + date_now + "_" + thread_name + ".txt", 'a')
f.write(str(time_now) + "\t" + 'still running' + "\n")
f.close()
time.sleep(self.interval)
for x in range(4):
print ("Thread {0} started.".format(x))
# This is the thread class that we instantiate.
example = ThreadingExample()
time.sleep(30)
print('Checkpoint')
time.sleep(50000)
print('Bye')
我觉得我在python或linux中缺少一些基本的东西,但不确定是哪一个。