0

我需要带有多处理队列的 python 上的 linux 守护进程。

我已经尝试过使用 python 妖魔化,但它的 pid、访问权限和启动/停止功能存在问题。

这是通过 python-daemon 包的选项。

节目清单:

#file test_daemon.py   
# To kick off the script, run the following from the python directory:
#   PYTHONPATH=`pwd` python testdaemon.py start    
#standard python libs
import logging
import multiprocessing
import random
import time
q = multiprocessing.Queue()

#third party libs
from daemon import runner

def printt(q):
    while True:
        time.sleep(1)
        print(q.get())

class App():
    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/tty'
        self.stderr_path = '/dev/tty'
        self.pidfile_path =  '/var/run/testdaemon/testdaemon.pid'
        self.pidfile_timeout = 5

    def run(self):
        p = multiprocessing.Process(target=printt, args=(q, ))
        p.start()

        while True:
            if q.empty():
                q.put(random.sample(range(1, 100), 5))
                print('put queue')
                time.sleep(0.05)

错误:

File "test_daemon.py", line 49, in <module>
    daemon_runner.do_action()
  File "/usr/local/lib/python2.7/dist-packages/daemon/runner.py", line 274, in do_action
    func(self)
  File "/usr/local/lib/python2.7/dist-packages/daemon/runner.py", line 193, in _start
    self.app.run()
  File "test_daemon.py", line 32, in run
    if q.empty():
  File "/usr/lib/python2.7/multiprocessing/queues.py", line 146, in empty
    return not self._poll()
IOError: poll() gave POLLNVAL or POLLERR
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "test_daemon.py", line 17, in printt
    print(q.get())
  File "/usr/lib/python2.7/multiprocessing/queues.py", line 117, in get
    res = self._recv()
UnpicklingError: invalid load key, '='.

怎么了?

提前致谢。

4

0 回答 0