如何将信息提供给Python守护程序?

mim*_*ipc 6 python linux queue pipe fifo

我有一个在Linux系统上运行的Python守护进程.我想提供诸如"Bob","Alice"等信息,并将守护进程打印为"Hello Bob".和"Hello Alice"到一个文件.

这必须是异步的.Python守护进程必须等待信息并在收到信息时打印它.

实现这一目标的最佳方法是什么?

我在考虑命名管道或Queue库,但可能有更好的解决方案.

cht*_*mon 6

以下是使用fifo的方法:

# receiver.py

import os
import sys
import atexit

# Set up the FIFO
thefifo = 'comms.fifo'
os.mkfifo(thefifo)

# Make sure to clean up after ourselves
def cleanup():
    os.remove(thefifo)
atexit.register(cleanup)

# Go into reading loop
while True:
    with open(thefifo, 'r') as fifo:
        for line in fifo:
            print "Hello", line.strip()
Run Code Online (Sandbox Code Playgroud)

您可以在shell会话中使用它

$ python receiver.py &
$ echo "Alice" >> comms.fifo
Hello Alice
$ echo "Bob" >> comms.fifo
Hello Bob
Run Code Online (Sandbox Code Playgroud)


小智 5

有几种选择

1) 如果守护进程应该接受来自其他系统的消息,则使守护进程成为 RPC 服务器 - 使用 xmlrpc/jsonrpc。

2) 如果都是本地的,则可以使用 TCP 套接字或命名 PIPE。

3)如果有大量客户端同时连接,可以使用select.epoll。


Tas*_*lou 0

您可以使用几种机制,但一切都归结为使用 IPC(进程间通信)。

现在,您将使用的实际机制取决于您可以实现的细节,但一个好的解决方案是使用 zmq 之类的东西。

检查 zmq 上的 pub/sub 的以下示例

http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/patterns/pubsub.html

还有这个

http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/multisocket/zmqpoller.html

为非阻塞方式。