我有一个用python-daemon package
创建的python守护进程我的应用程序工作正常,但现在我想让它成为多线程。
该应用程序是从this example构建的。
我了解如何使用模块线程。
但如何将它们一起使用?
我需要在不同的线程中运行我的应用程序的方法run()
。
又名
def run(self):
# run threads.
while True:
因此,只有主线程执行所有守护进程,如锁定文件等,而其他线程只是并行执行一些额外的工作。
这可能吗?以及如何做到这一点?
更新。也许multiprocessing模块比这更好吗?
答案 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