【Python】基于Celery的分布式应用

架构


安装Celery

  • pip install celery

编写Task-Func

#-*-coding:utf-8-*-
#download.py

from celery import Celery
import urllib

app = Celery('download', broker='redis://localhost:6379/1')

# 图片url
img_url = ["http://img.hb.aicdn.com/3750dffcf16726889691f6d619671c51703a01db236961-TspqDv",
           "http://img.hb.aicdn.com/91681f86e011c3b5dee27a75a0c353d418e5cf4226739-knqXah",
           "http://img.hb.aicdn.com/8665e8c98a68a7677fea45fa0b2a7d426fe8b730814da-4R9hsY",
           "http://img.hb.aicdn.com/605ca501843c37f602b781f83fb44709187c8e45988b5-bet9jM",
           "http://img.hb.aicdn.com/af2c2f3add40743457e7f7bcf9260da85ac4a790aa6e1-NisN4l"
]

@app.task
def download(img_url):
    fname = img_url.replace("http://img.hb.aicdn.com/", "")
    urllib.urlretrieve(img_url, "%s.jpg" % fname)

if __name__ == "__main__":
    # 将任务delay入队列
    for url in img_url:
        download.delay(url)

启动Redis-Server

  • ./redis-server ./redis.conf

启动多个Celery-Worker

  • 每个worker都连接到同一个redis-server
  • celery worker -A download -l info -c 5
  • -c 5 表示每个worker都开5个进程
  • 现在Celery-Worker正在监听任务

执行download.py脚本,将任务delay进队列

  • python download.py
  • worker会自动从队列获取任务并执行

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值