我需要在python上使用多处理队列的linux守护进程。
我已经尝试了python妖魔化,但是它有pid,访问权限和启动/停止功能的问题。
这是opion通过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, '='.
有什么问题?
提前致谢。