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
zzWinD
V2EX  ›  Python

webpy图片下载守护程序

  •  
  •   zzWinD · 2012 年 7 月 17 日 · 6539 次点击
    这是一个创建于 4938 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我要实现一个图片下载程序,思路是这样的:
    webpy
    前台输入图片地址保存到数据库,后台有一个守护程序。发现有新的未下载的图片,马上下载。
    现在想问的是 webpy 框架 自身可以实现这个守护程序吗?

    说简明一点:webpy启动的时候,下载图片的程序也运行。
    25 条回复    1970-01-01 08:00:00 +08:00
    sykp241095
        1
    sykp241095  
       2012 年 7 月 17 日
    可以,但没有这么做的
    zzWinD
        2
    zzWinD  
    OP
       2012 年 7 月 17 日
    @sykp241095 谢谢你的回复,
    请问什么方法才更适合我的需求?
    sykp241095
        3
    sykp241095  
       2012 年 7 月 17 日
    You need a standalone consumer.
    judezhan
        4
    judezhan  
       2012 年 7 月 17 日
    ...我实在是没明白你的意思。一个cronjob+shell脚本就搞定了吧?还是我曲解了你的意思?
    shellex
        5
    shellex  
       2012 年 7 月 17 日
    @zzWinD 的意思是需要一个web介面提交下载地址,让呼叫一个下载程序去下载。

    如果是我的话,我也会用一个独立程序来处理下载的事宜。你可以让这个下载程序访问数据库获得需要下载的任务,也可以让那个web暴露一个API提供任务给下载程序。
    zzWinD
        6
    zzWinD  
    OP
       2012 年 7 月 17 日
    @judezhan 我比较喜欢收集网上的图片,但是每次看到另存为嫌麻烦。就像做个站点。把图片的地址提交上去,让服务器去下载好。有种随时随地保存图片的意思。。不好意思。。文采不好。


    @shellex 嗯,我想也是独立的程序去下载。有点类似windows C#里面的服务,就默默的运行在后端。有新图片了,去下载。我想webpy 有没有这种daemon 的功能。
    messense
        7
    messense  
       2012 年 7 月 17 日
    也许需要用 python-rq 或者 celery 这样的Task Queue?
    shellex
        8
    shellex  
       2012 年 7 月 17 日
    @zzWinD 这和webpy无关。web部分也不应该处理这种任务。如果是Linux配合cron或者自己做个daemon就可以了。
    arzon
        9
    arzon  
       2012 年 7 月 17 日
    @zzWinD 典型的生产者-消费者的需求. 可以用线程+队列解决.
    随应用服务器初始化一个消费者线程和生产队列. 提交地址时将地址放入队列. 消费者线程依次从队列中取出地址进行下载保存.
    jamiesun
        10
    jamiesun  
       2012 年 7 月 17 日
    单独启动一个守护进程轮训就可以了

    参考代码 http://www.talkincode.org/code/view/060bd1270e094713b390fd0bea8f19b5
    zzWinD
        11
    zzWinD  
    OP
       2012 年 7 月 18 日
    @messense 没有接触过TaskQueue队列 找资料看看。

    @shellex 嗯,cron 可能不实时,也是一种解决方法。

    @arzon 正在看 生产者-消费者

    @jamiesun 需要翻墙么? 翻不翻都打不开。
    Archangel_SDY
        12
    Archangel_SDY  
       2012 年 7 月 18 日
    做过一个类似的, 前台用js bookmarklet提交请求, 后台用celery处理下载, 队列用rabbitmq.
    webpy的话用在处理前台请求和管理页比较合适.
    lanbing
        13
    lanbing  
       2012 年 7 月 18 日
    ilessd
        14
    ilessd  
       2012 年 7 月 18 日
    ipconfiger
        15
    ipconfiger  
       2012 年 7 月 18 日
    $sudo pip install celery

    一切没烦恼
    cyberscorpio
        16
    cyberscorpio  
       2012 年 7 月 18 日
    一般来说,可能你得提交两个地址。除了图片的 URL 之外,还要 HTTP_REFERER,否则很多网站会返回 403...
    jamiesun
        17
    jamiesun  
       2012 年 7 月 19 日
    shiweifu
        18
    shiweifu  
       2012 年 7 月 20 日
    cronjob + Python + 一个kv(k是文件地址,v是保存的路径)
    bigzhu
        19
    bigzhu  
       2012 年 7 月 24 日
    我做的 http://digzhu.com 其实有部分功能用到你说的这个.
    我这个站是用来推荐网站的. 输入 url,然后抓取站点截图.

    正好也是用 web.py 开发的. 确实得用另外的程序来抓.
    python 就判断下抓过没有,还有转换下图片大小等杂事.
    ivanlw
        20
    ivanlw  
       2012 年 9 月 22 日
    @bigzhu 你这个好神奇啊……怎么输入URL自动抓的?用的啥……
    yuelang85
        21
    yuelang85  
       2012 年 9 月 22 日
    跟 @judezhan 想法一样,觉得cron+shell就能搞定啊
    darklowly
        22
    darklowly  
       2012 年 9 月 22 日
    直接创建一个后台线程就可以了。
    mckelvin
        23
    mckelvin  
       2012 年 9 月 22 日
    如果LZ嫌cron麻烦的话可以tmux开一个panel直接写轮询呀
    clowwindy
        24
    clowwindy  
       2012 年 9 月 22 日
    https://github.com/clowwindy/PyWebGet

    以前写的 Python 下载器,也用到了 web.py,供参考。
    xi4nyu
        25
    xi4nyu  
       2012 年 9 月 25 日
    异步+队列.
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   933 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:38 · PVG 04:38 · LAX 12:38 · JFK 15:38
    ♥ Do have faith in what you're doing.