【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多