如何启动多线程脚本并退出终端会话?

时间:2016-10-08 00:55:24

标签: python multithreading background-process

我开发了一个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中缺少一些基本的东西,但不确定是哪一个。

0 个答案:

没有答案