以爬douban**為例
首先啟動redis,新建檔案crawl_douban.py
import requests
from bs4 import beautifulsoup
import time
from celery import celery
import redis
from configparser import configparser
cp=configparser()
cp.read('config')
#獲取配置資訊
db_host=cp.get(section='redis',option='db_host')
db_port=cp.getint('redis','db_port')
db_pwd=cp['redis']['db_pwd']
#redis連線
pool = redis.connectionpool(host=db_host, port=db_port, db=15, password=db_pwd)
r = redis.strictredis(connection_pool=pool)
set_name='crawl:douban'
# 官方推薦使用json作為訊息序列化方式
celery_timezone='asia/shanghai',
celery_enable_utc=true,
celery_accept_content=['json'],
celery_task_serializer='json',
celery_result_serializer='json',
)headers=
defcrawl
(url):
res=requests.get(url,headers=headers)
#延遲2秒
time.sleep(2)
soup=beautifulsoup(res.text,'lxml')
items=soup.select('.subject-list .subject-item .info h2 a')
titles=[item['title'] for item in items]
#將**的title存入redis資料庫
r.sadd(set_name,(url,titles,time.time()))
print(titles)
return (url,titles)
將上面的指令碼部署到兩台主機a和b,然後各自執行下面的命令:
celery -a crawl_douban worker -l info
在本機c新建檔案task_dispatcher.py用於非同步分發任務,**如下:
from crawl_douban import crawl
defmanage_crawl
(urls):
for url in urls:
if __name__ == '__main__':
start_url = '**'
#爬去10頁,每頁20本書
url_list = ['{}?start={}&type=t'.format(start_url, page * 20) for page in range(10)]
manage_crawl(url_list)
執行task_dispatcher.py,跑完用時2.8s
celery
worker-a
tasks--
loglevel=info--
concurrency=5
引數」-a」指定了celery例項的位置
引數」loglevel」指定了日誌等級,也可以不加,預設為warning。
引數」concurrency」指定最大併發數,預設為cpu核數。
[program:celery]
command=celery worker -a tasks --loglevel=info --concurrency=5
directory=/home/user_00/learn
stdout_logfile=/home/user_00/learn/logs/celery.log
autorestart=true
redirect_stderr=true
Celery分布式應用
最近有應用需要部署到不同的伺服器上執行,但是有沒有pbs這樣的排程系統,就想起來python的排程神器 celery。現在針對我的實際應用做一些記錄。因為我並不注重結果而是把命令拿到不同的機器上執行,所以訊息 和結果儲存我都選擇了 redis 只需要在一台伺服器上安裝 redis,其他伺服器均使用該...
celery實現分布式
worker執行在不同的機器上,每台機器上有多個task程序 worker執行的時候連線到broker,在控制機器上 任務發布節點 直接向broker傳送任務,只要建立乙個broker,在不同的機器上執行celery worker。框架圖 task.py coding utf 8 from cele...
分布式佇列 Celery
詳情參見 分布式佇列神器 celery 2 celery 4.1 使用者指南 task 任務 3 celery 4.1 使用者指南 calling tasks 呼叫任務 4 celery 4.1 使用者指南 canvas designing work flows 設計工作流程 5 celery 4....