python - 将 python 守护程序公开为服务

标签 python linux unix service daemon

因此,我已经能够从 Python 脚本中提取出两个非常有值(value)的特性。第一个是从命令行将 python 函数作为服务运行的能力。为简单起见,假设 python 脚本接受命令行参数。类似的东西:

import sys

def foo():
    return "%s is your last argument!" % sys.argv[-1]

foo()

然后我将通过运行 python file.py somearg 全局访问它此外,我可以编写一个 supervisord 脚本来守护脚本并使其在内存中运行。我现在发现自己处于同时需要这两个功能的位置,但我不确定从哪里开始。为清楚起见,我基本上遵循以下思路:

if __name__ == "__main__":
    big_file = open(slow_loader)
    foo(big_file)

理想情况下,一旦运行,我将保留整个 big_file在内存中并能够访问 foo方法取决于big_file通过运行类似于原始 python file.py somearg 的东西.不过,我不太确定如何从这里取得进展。

任何帮助,即使它只是一些文档的链接也会非常有帮助。提前,我意识到我可以将其包装在一个浅 flask 应用程序中并通过 http 运行它请求,但出于 NDA 的原因,我需要通过内部 shell 命令运行的东西。

最佳答案

仅仅因为我喜欢zmq和gevent,我可能会做这样的事情:

服务器.py

import gevent
import gevent.monkey
gevent.monkey.patch_all()
import zmq.green as zmq
import json

context = zmq.Context()
socket = context.socket(zmq.ROUTER)
socket.bind("ipc:///tmp/myapp.ipc")

def do_something(parsed):
    return sum(parsed.get("values"))

def handle(msg):
    data = msg[1]
    parsed = json.loads(data)
    total = do_something(parsed)
    msg[1] = json.dumps({"response": total})
    socket.send_multipart(msg)

def handle_zmq():
    while True:
        msg = socket.recv_multipart()
        gevent.spawn(handle, msg)

if __name__ == "__main__":
    handle_zmq()

然后您将拥有一个用于命令行工具的 client.py,例如

import json
import zmq

request_data = {
        "values": [10, 20, 30 , 40],
        }

context = zmq.Context()
socket = context.socket(zmq.DEALER)
socket.connect("ipc:///tmp/myapp.ipc")
socket.send(json.dumps(request_data))
print socket.recv()

显然这是一个人为的例子,但你应该明白了。或者,您也可以为此使用 xmlrpc 或 jsonrpc 之类的东西。

关于python - 将 python 守护程序公开为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23923658/

相关文章:

c - 列出目录内容,如 Unix 'find' 命令

bash - Awk 将双引号字符串视为一个标记并忽略其间的空格

params 中 param 的 python 语法

python - 无法比较天真和有意识的 datetime.now() <= challenge.datetime_end

linux - 增加或增加作为 grep 结果的整数

linux - 无法更改tomcat 7堆大小

unix - lsof 打印数字端口

python - 让 Django/NGINX/uWSGI 在 Ubuntu 14.04 上工作

python - 如何将不同排名的列表连接成排名 0 的单个列表?

linux - 读取带有 unicode 字符的文本文件 - Python3