资讯专栏INFORMATION COLUMN

Celery

Pikachu / 1758人阅读

摘要:文件目录如下启动命令命令生成任务命令日志设置为空为空为空为空为空

文件目录如下:

celery flower启动命令:

celery -A tasks flower --loglevel=info

celery 命令:

celery -A tasks worker --loglevel=info

生成任务命令:

python generate_task.py

tasks.py

#!/usr/bin/env python
# encoding: utf-8

import logging
import time
import json

from celery import Celery


app = Celery("reyun")

app.config_from_object("config")

# 日志设置
datefmt = "%Y-%m-%d %H:%M:%S"
log_format = "%(asctime)s - %(message)s"
logging.basicConfig(level=logging.INFO, format=log_format, datefmt=datefmt)

# @app.task(utc=True, expires=10)
@app.task(utc=True, name="tasks.crawl", rate_limit="12/m")
def crawl(request_data):
    try:
        request_data = json.loads(request_data)
    except Exception as e:
        logging.error(e, exc_info=True)
    if not request_data:
        return
    url = request_data.get("url", None)
    if not url:
        logging.info("url为空",exc_info=True)
        return
    headers = request_data.get("headers", None)
    if not headers:
        logging.info("headers为空",exc_info=True)
        return
    method = request_data.get("method", None)
    if not method:
        logging.info("method为空",exc_info=True)
        return
    params = request_data.get("params", None)
    if not params:
        logging.info("params为空",exc_info=True)
        return
    cat = request_data.get("cat", None)
    if not cat:
        logging.info("cat为空",exc_info=True)
        return
    data = request_data.get("data", None)
    cookies = request_data.get("cookies", None)
    json_data = request_data.get("json_data", None)
    timeout = request_data.get("timeout", None)
    if json_data:
        result = post_json(url, headers, json_data, cookies=cookies, timeout=timeout)
    else:
        result = send(url, headers, params=params, data=data, method=method, timeout=timeout, cookies=cookies)
    return time.time()
    # spider = self.cat_spider_dict.get(cat)
    # if spider:
    #     spider.process_res(result=result, request_data=request_data)
    # else:
    #     logging.error("spider is None cat is %s " % cat)

config.py

#!/usr/bin/env python
# encoding: utf-8


from kombu import Exchange, Queue

CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/4"
BROKER_URL = "redis://127.0.0.1:6379/5"

CELERY_TIMEZONE = "Asia/Shanghai"

CELERY_QUEUES = (
    Queue("craw_queue", Exchange("craw_queue"), routing_key="crawl"),
)

CELERY_ROUTES = {
    "tasks.crawl": {"queue": "craw_queue", "routing_key": "craw_queue"}
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42752.html

相关文章

  • 异步任务神器 Celery 简明笔记

    摘要:我们将窗口切换到的启动窗口,会看到多了两条日志这说明任务已经被调度并执行成功。本文标题为异步任务神器简明笔记本文链接为参考资料使用之美分布式任务队列的介绍思诚之道异步任务神器简明笔记 Celery 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务。比如,在 Web 开发中,对新用户的注册,我们通常会给他发一封激活邮件,...

    Ryan_Li 评论0 收藏0
  • Celery中使用Flask的上下文

    摘要:所以这就现实了在中使用的应用上下文。要引入请求上下文,需要考虑这两个问题如何在中产生请求上下文。中有和可以产生请求上下文。具体的思路还是在中重载类,通过,在的上下文环境下执行。将他们传入,生成伪造的请求上下文可以覆盖大多数的使用情况。 其实我只是想把邮件发送这个动作移到Celery中执行。既然用到了Celery,那么每次发邮件都单独开一个线程似乎有点多余,异步任务还是交给Celery吧...

    Sourcelink 评论0 收藏0
  • django开发-使用celery搭建分布式(多节点)任务队列

    摘要:今天介绍一下如何在项目中使用搭建一个有两个节点的任务队列一个主节点一个子节点主节点发布任务,子节点收到任务并执行。 今天介绍一下如何在django项目中使用celery搭建一个有两个节点的任务队列(一个主节点一个子节点;主节点发布任务,子节点收到任务并执行。搭建3个或者以上的节点就类似了),使用到了celery,rabbitmq。这里不会单独介绍celery和rabbitmq中的知识了...

    ConardLi 评论0 收藏0
  • Celery任务队列

    摘要:文档中文文档官方文档定时服务与结合使用简介是一个自带电池的的任务队列。追踪任务在不同状态间的迁移,并检视返回值。 文档 中文文档 官方文档 celery定时服务、celery与django结合使用 简介 Celery 是一个自带电池的的任务队列。它易于使用,所以你可以无视其所解决问题的复杂程度而轻松入门。它遵照最佳实践设计,所以你的产品可以扩展,或与其他语言集成,并且它自带了在生产...

    Lorry_Lu 评论0 收藏0

发表评论

0条评论

Pikachu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<