【问题标题】:Python multithreaded daemon (modules daemon and threading to use together )Python 多线程守护进程(模块守护进程和线程一起使用)
【发布时间】:2015-10-02 13:10:59
【问题描述】:
我有一个使用 python-daemon package 创建的 python 守护进程
我的应用程序运行良好,但现在我想让它成为多线程的。
应用程序是从 this example 构建的。
我了解如何使用模块线程。
但是如何同时使用它们呢?
我需要在不同的线程中运行我的应用程序的方法run()。
阿卡
def run(self):
# run threads.
while True:
所以只有主线程会做所有的守护进程,比如锁文件等,而其他线程只是并行做一些额外的工作。
这可能吗?以及怎么做?
更新。也许multiprocessing 模块比线程更好?
【问题讨论】:
标签:
python
multithreading
daemon
python-multithreading
【解决方案1】:
您确定需要特定于 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