V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rockhead
V2EX  ›  Django

这样做django的后台运行程序是否可以?

  •  
  •   rockhead · 2013-01-22 12:13:26 +08:00 · 11001 次点击
    这是一个创建于 4353 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现有一个django app; 想要增加一个爬虫定期更新数据,这个爬虫显然是长时间运行的;

    所以我想:
    1 给app 增加一个django custom command
    2 后台执行该命令: nohup python manage.py mycmd &

    这样做是否可行?
    11 条回复    1970-01-01 08:00:00 +08:00
    7gong
        1
    7gong  
       2013-01-22 13:02:03 +08:00
    用 curl 定时出发某个 Post 或 get 页面就是了
    adieu
        2
    adieu  
       2013-01-22 13:06:21 +08:00   ❤️ 1
    可以试试看用 celery http://celeryproject.org/ 来做。定期执行和接受webapp下发的task都可以实现。
    rockhead
        3
    rockhead  
    OP
       2013-01-22 13:14:38 +08:00
    @adieu 谢谢 但感觉celery有点牛刀小用了;我这个是个小app,希望尽可能简单
    ratazzi
        4
    ratazzi  
       2013-01-22 13:21:22 +08:00   ❤️ 1
    开个线程跑也是一个办法,如果要后台以命令方式运行的话还是建议用 supervisor,不要用 nohup
    Js
        5
    Js  
       2013-01-22 14:10:09 +08:00   ❤️ 2
    轻量级的daemon其实可以这样实现

    import os, ctypes
    import ctypes.util

    ctypes.CDLL(ctypes.util.find_library('c')).daemon(0,0)

    open('/var/run/demo.pid','w').write(str(os.getpid()))
    rockhead
        6
    rockhead  
    OP
       2013-01-22 15:51:59 +08:00
    @Js 这段代码没看懂 可否解释下?
    BigZ
        7
    BigZ  
       2013-01-23 18:52:00 +08:00
    你是想用django的 orm部分吧,把这段加到你的py文件头部,文件可以单独执行

    import sys, os

    PROJECT_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(PROJECT_DIR)

    from django.core.management import setup_environ
    import settings
    setup_environ(settings)
    Js
        8
    Js  
       2013-01-25 14:35:31 +08:00
    @rockhead
    nohup是忽略了SIGHUP信号, 重定向stdout,stderr实现一个模拟守护进程
    这个是用ctypes调用glibc的daemon函数, 直接实现了守护进程
    freefcw
        9
    freefcw  
       2013-01-25 14:50:23 +08:00
    @Js omg……你这写法太牛逼了,要我就会直接开个screen,在里面跑python daemon.py
    mitnk
        10
    mitnk  
       2013-01-25 14:53:03 +08:00   ❤️ 1
    rockhead
        11
    rockhead  
    OP
       2013-01-26 08:19:20 +08:00 via iPhone
    谢谢各位 我实践一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:28 · PVG 18:28 · LAX 02:28 · JFK 05:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.