• celery, 数据库分表


    celery异步任务

    文件被执行时, 文件所在的目录会被添加到环境变量中

    通过"."进行相对导入时, 导入语句所在的文件不能为执行文件

    通过脚本添加任务

    '''
    # ...luffyapiscriptscelerycelery_taskcelery.py
    from celery import Celery
    
    app = Celery(broker='redis://localhost:6379/0', backend='redis://localhost:6379/1', include=['celery_task.tasks'])
    
    
    # ...luffyapiscriptscelerycelery_task	asks.py
    from .celery import app
    
    
    @app.task  
    def task1(x, y):
        print('task1')
        return 'task1_res: %s' % str(x + y)
    
    
    @app.task
    def task2(a, b):
        print('task2')
        return 'task2_res: %s' % str(a - b)
        
    
    # 在cmd终端cd到: ...luffyapiscriptscelery, 然后执行: celery worker -A celery_task -l info -P gevent 启动worker服务
    
    
    # ...luffyapiscriptsceleryadd_task.py
    from celery_task.tasks import task1, task2
    from datetime import datetime, timedelta
    
    task1.apply_async(args=(10, 20))
    task2.apply_async(args=(10, 20), eta=datetime.utcnow() + timedelta(seconds=10))
    
    
    # ...luffyapiscriptsceleryget_results.py
    from celery_task.celery import app
    from celery.result import AsyncResult
    
    async = AsyncResult(id="6dd3fdaf-ef6f-4fd9-9de9-48b39562fc57", app=app)
    
    if async.successful():
        result = async.get()
        print(result)
    '''
    

    启动新的beat服务添加任务

    '''
    # ...luffyapicelery_taskcelery.py
    import os
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev_settings")
    
    from celery import Celery
    
    app = Celery(broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/1', include=['celery_task.tasks'])
    
    app.conf.timezone = 'Asia/Shanghai'  # 设置时区
    
    # from celery.schedules import crontab
    from datetime import timedelta
    
    app.conf.beat_schedule = {  # Scheduler: Sending due task xxx (celery_task.tasks.update_banner_cache)
        'xxx': {
            # 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点
            'task': 'celery_task.tasks.update_banner_cache',
            'schedule': timedelta(seconds=10),
            'args': (),
        },
    }
    
    
    # ...luffyapicelery_task	asks.py
    from .celery import app
    from luffyapi.apps.home.models import Banner
    from luffyapi.apps.home.serializers import BannerModelSerializer
    from django.conf import settings
    from django.core.cache import cache
    
    
    # 使用celery添加任务周期性更新django缓存
    @app.task
    def update_banner_cache():
        banner_queryset = Banner.objects.filter(is_delete=False, is_show=True).order_by('-orders').all()[:settings.BANNER_AMOUNT]
        banner_ser = BannerModelSerializer(banner_queryset, many=True)
    
        for banner in banner_ser.data:
            banner['image'] = "%s%s" % (settings.BASE_URL, banner.get('image'))  # BannerModelSerializer类根据request对象拼接后端url根路径
    
        cache.set('banner_cache', banner_ser.data)
        return True
    
    
    # 打开一个cmd, cd到: E:luffyluffyapi, 然后执行: celery worker -A celery_task -l info -P gevent 启动worker服务
    # 打开另一个cmd, cd到: E:luffyluffyapi, 然后执行: celery beat -A celery_task -l info 启动beat服务
    '''
    

    数据库分表

    免费课, 实战课, 轻课分三张表, 而不是放在一张表中, 建立抽象基表存放公共字段

  • 相关阅读:
    C/C++指针精髓转载
    彻底搞定c指针系列转载
    vc根据域名获取IP地址 gethostbyname()函数
    try catch finally的执行顺序
    vc2008中mfc字符串转换待续
    C++字符串完全指引(二)转载
    vc随机字符串
    C++字符串完全指引转载
    编写c++程序的优良习惯
    ReportViewer一些技巧
  • 原文地址:https://www.cnblogs.com/-406454833/p/12709326.html
Copyright © 2020-2023  润新知