Python多线程守护进程(模块守护进程和线程一起使用)

时间:2015-10-02 13:10:59

标签: python multithreading daemon python-multithreading

我有一个用python-daemon package

创建的python守护进程

我的应用程序工作正常,但现在我想让它成为多线程。

该应用程序是从this example构建的。

我了解如何使用模块线程。

但如何将它们一起使用?

我需要在不同的线程中运行我的应用程序的方法run()。 又名

def run(self):
    # run threads.
    while True:

因此,只有主线程执行所有守护进程,如锁定文件等,而其他线程只是并行执行一些额外的工作。

这可能吗?以及如何做到这一点?

更新。也许multiprocessing模块比这更好吗?

1 个答案:

答案 0 :(得分:0)

您确定需要一个特定于python的守护程序包吗?有一些工具可以将任何循环程序变成一个守护进程(想到start-stop-daemon)

#!/bin/bash

### BEGIN INIT INFO
# Provides:          <whatever> 
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 6
# Short-Description: Start daemon at boot time
# Description:       <whatever> auto start.
### END INIT INFO

#set -x
set -e

if [ "$1" = "start" ]
    then
        start-stop-daemon --start --startas /usr/bin/python3 --pidfile /tmp/<whatever>.pid --make-pidfile --background --chdir '/var/local/<whatever>/' -- <whatever>.py

elif [ "$1" = "stop" ]
    then
        start-stop-daemon --stop --signal 2 --pidfile /tmp/<whatever>.pid
fi

否则,如果你真的需要它,那么我恐怕我不明白你的问题,你可以简单地开始这样的线程

import threading
w = threading.Thread(target=run, args=(<args>, <args>, <args>))
w.setDaemon(True)
w.start()
#code

否则,如果您想以多进程方式运行代码,可以这样做

import multiprocessing
p = multiprocessing.Process(target=run, args=(<args>, <args>, <args>))
p.start()
p.join()
#code