rockhead
V2EX  ›  Django

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

  •  
  •   rockhead · Jan 22, 2013 · 12377 views
    This topic created in 5044 days ago, the information mentioned may be changed or developed.
    现有一个django app; 想要增加一个爬虫定期更新数据,这个爬虫显然是长时间运行的;

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

    这样做是否可行?
    11 replies  •  1970-01-01 08:00:00 +08:00
    7gong
    7gong
    Jan 22, 2013
    1
    用 curl 定时出发某个 Post 或 get 页面就是了
    adieu
    adieu
    Jan 22, 2013❤️1
    2
    可以试试看用 celery http://celeryproject.org/ 来做。定期执行和接受webapp下发的task都可以实现。
    rockhead
    rockhead
    OP
    Jan 22, 2013
    3
    @adieu 谢谢 但感觉celery有点牛刀小用了;我这个是个小app,希望尽可能简单
    ratazzi
    ratazzi
    PRO
    Jan 22, 2013❤️1
    4
    开个线程跑也是一个办法,如果要后台以命令方式运行的话还是建议用 supervisor,不要用 nohup
    Js
    Js
    Jan 22, 2013❤️2
    5
    轻量级的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
    rockhead
    OP
    Jan 22, 2013
    6
    @Js 这段代码没看懂 可否解释下?
    BigZ
    BigZ
    Jan 23, 2013
    7
    你是想用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
    Js
    Jan 25, 2013
    8
    @rockhead
    nohup是忽略了SIGHUP信号, 重定向stdout,stderr实现一个模拟守护进程
    这个是用ctypes调用glibc的daemon函数, 直接实现了守护进程
    freefcw
    freefcw
    Jan 25, 2013
    9
    @Js omg……你这写法太牛逼了,要我就会直接开个screen,在里面跑python daemon.py
    mitnk
    mitnk
    Jan 25, 2013❤️1
    10
    rockhead
    rockhead
    OP
    Jan 26, 2013 via iPhone
    11
    谢谢各位 我实践一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1826 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 15:40 · PVG 23:40 · LAX 07:40 · JFK 10:40
    ♥ Do have faith in what you're doing.