V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
codegear
V2EX  ›  Python

Linux下前台web配置,后台守护线程这样的模型大家是怎么用Python实现的?

  •  
  •   codegear · 2014-02-08 17:50:40 +08:00 · 3849 次点击
    这是一个创建于 3941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基本需求是:
    1. 后台有个root权限的守护进程;
    2. 前台需要能通过网页(server)对后台的守护进程发出命令;
    3. 能尽可能少的占用内存(<5M最好,因为要跑在极小内存的虚拟机上);
    4. 前后台不涉及任何数据库。

    现在考虑全部用python来写。

    我目前的一点想法是这样的:
    1. 首先考虑到安全问题,网页的server不与守护进程共享同一个进程。用root起守护进程,用普通用户起web server。但是这样的问题是需要起两个python进程,而我试了bottle, web.py这样的框架至少需要7M内存,那么两个进程的开销势必会超过10M;
    2. 如果守护进程与web server的通信使用http,则守护进程用web框架即可实现,但感觉http有些大材小用;如果通信用unix_socket,不知道在python上有没有简易的框架好实现。

    不知道各位遇到这样的需求是怎么做的,先行感谢!
    2 条回复    1970-01-01 08:00:00 +08:00
    yueyoum
        1
    yueyoum  
       2014-02-08 18:13:25 +08:00   ❤️ 1
    最简单的就是 定义好协议,(可以自己组织二进制,也可以用protobuf 这些现成的东西)

    然后 你的服务监听在一个端口上,TCP连接,收到数据处理返回即可。

    为了更方便一点,可以用 zeromq 这种socket封装,极大的方便的你的工作。
    而且如果 服务是独立的, 你就会发现zeromq的好处了, 起多个服务,一起来处理请求。

    当然,单进程如果合适 也可以用gevent来提高响应。

    最后将整个程序 daemonize即可, 可以用 supervisor
    也可以看看我写的一个 daemonize的工具, 只要自己处理好日志就行:
    https://github.com/yueyoum/daemonize


    如果内存限制再大点,使用最方便的应该就是 celery了。
    mkeith
        2
    mkeith  
       2014-03-06 09:36:33 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 134ms · UTC 19:12 · PVG 03:12 · LAX 11:12 · JFK 14:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.