我需要带有多处理队列的 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, '='.
怎么了?
提前致谢。