当前位置: 首页 > news >正文

怎样把网站打包做百度小程序seo全国最好的公司

怎样把网站打包做百度小程序,seo全国最好的公司,wordpress文章图片点击放大预览,咋样着做自己的网站参考博客:https://www.cnblogs.com/pyedu/p/12461819.html 参考视频:01 celery的工作机制_哔哩哔哩_bilibili 定义:简单灵活、处理大量消息的分布式系统,专注于实时处理异步队列,支持任务调度 主要架构: …

参考博客:https://www.cnblogs.com/pyedu/p/12461819.html

参考视频:01 celery的工作机制_哔哩哔哩_bilibili


定义:简单灵活、处理大量消息的分布式系统,专注于实时处理异步队列,支持任务调度

主要架构:

  1. 消息中间件:message broker 可以集成第三方消息中间件如Redis、RabbitMQ
  2. 任务执行单元:worker 是celery提供的执行的任务执行的单元,并发分布在分布式的系统节点中
  3. 任务执行结果存储:task result store来存储执行任务的结果,支持方式 redis、AMQP

同步请求: 顺序进行IO操作等待阻塞进程依次执行

异步请求:异步进行,当IO操作阻塞时放到执行单元中完成放到数据库中而不影响其他单元的执行,当主进程需要阻塞的进程结果时会向是数据库中取出该数据(即将耗时操作放到异步队列中不影响主进程的执行),继续向下进行

使用场景:

  1. 异步任务:将耗时操作任务提交到celery异步执行,如:发送短信、消息推送、音视频处理
  2. 定时任务:定时执行某件事情,如:每日数据统计

主要优点:

  • 简单:使用和维护不要配置文件,只需添加基本信息的配置
  • 高可用:在work和client网络连接丢失或失败时会自动进行重试
  • 快速:单个celery进程可每分钟处理百万级任务,只需要毫秒级的往返延迟
  • 灵活:可以扩展使用,自定义池的实现、序列化、日志记录、消费者、broker消息传输

安装:

pip install celery

实践案例:

"""
异步任务执行文件:celery_task.py
消费者模型
"""
import celery
import time
# task.py
import osos.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')backend='redis://127.0.0.1:6379/1'
broker='redis://127.0.0.1:6379/2'
cel=celery.Celery('test',backend=backend,broker=broker)
@cel.task
def send_email(name):print("向%s发送邮件..."%name)time.sleep(5)print("向%s发送邮件完成"%name)return "ok"@cel.task
def send_msg(name):print("向%s发送短信..."%name)time.sleep(5)print("向%s发送短信完成"%name)return "ok"""""
执行任务文件: produce_task.py
生成者模型
"""
from celery_task import send_email,send_msg
result = send_email.delay("yuan") # 当执行delay函数时会自动调用消息中间件的任务执行队列,放到任务执行单元中
print(result.id)
result = send_msg.delay("alex")
print(result.id)

先启动redis进程

 使用特定命令下发指令执行celery任务:

(注意celery5.0之前的命令是不一样的:celery worker -A celery_task -l info)

 先执行produce_task.py

返回ID: 

 fd27bc20-ccac-4855-9b3d-150708bad2a6
c07cb5b1-845a-44c4-963b-7ce3f92b98c8

 检查celery的异步队列查看执行结果

 注:当遇到以下情况

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\python3\lib\site-packages\billiard\pool.py", line 361, in workloop
    result = (True, prepare_result(fun(*args, **kwargs)))
  File "D:\python3\lib\site-packages\celery\app\trace.py", line 664, in fast_trace_task
    tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)
[2024-02-24 15:31:20,394: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')

解决方法:

在消费者模型中添加以下代码

import os
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')

 查看异步执行的结果:

"""
查看任务执行结果: result.py
"""
from celery.result import AsyncResult
from celery_task import celasync_result=AsyncResult(id="fd27bc20-ccac-4855-9b3d-150708bad2a6", app=cel)if async_result.successful():result = async_result.get()print(result)# result.forget() # 将结果删除
elif async_result.failed():print('执行失败')
elif async_result.status == 'PENDING':print('任务等待中被执行')
elif async_result.status == 'RETRY':print('任务异常后正在重试')
elif async_result.status == 'STARTED':print('任务已经开始被执行')# 运行结果是上面执行返回的结果:
ok 

celery多任务结构下异步执行:注意celery_tasks的celery名字是固定,不然会报错

# celery
from celery import Celerycel = Celery('celery_demo',broker='redis://127.0.0.1:6379/1',backend='redis://127.0.0.1:6379/2',# 包含以下两个任务文件,去相应的py文件中找任务,对多个任务做分类include=['celery_tasks.task01','celery_tasks.task02'])# 时区
cel.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
cel.conf.enable_utc = False# task01
import time
from .celery import cel@cel.task
def send_email(res):time.sleep(5)return "完成向%s发送邮件任务"%res# task02
import time
from .celery import cel
@cel.task
def send_msg(name):time.sleep(5)return "完成向%s发送短信任务"%name# """"
执行任务文件: produce_task.py  和上面的celery_task保持在同一级目录
生成者模型
"""
from celery_tasks.task01 import send_email
from celery_tasks.task02 import send_msg# 立即告知celery去执行test_celery任务,并传入一个参数
result = send_email.delay('yuan')
print(result.id)
result = send_msg.delay('yuan')
print(result.id)
E:\desktop\my_drf\celerypro>celery -A celery_tasks worker -l info -P eventlet

运行结果:

 定时任务的配置:

# 更新produce_task 文件,增加定时任务
from celery_task import send_email
from datetime import datetime# 方式一
# v1 = datetime(2020, 3, 11, 16, 19, 00)
# print(v1)
# v2 = datetime.utcfromtimestamp(v1.timestamp())
# print(v2)
# result = send_email.apply_async(args=["egon",], eta=v2)  #  定时任务
# print(result.id)# 方式二
ctime = datetime.now()
# 默认用utc时间
utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
from datetime import timedelta
time_delay = timedelta(seconds=10)  # 当时时间10s后执行任务
task_time = utc_ctime + time_delay# 使用apply_async并设定时间
result = send_email.apply_async(args=["egon"], eta=task_time)
print(result.id)# 更新setting
cel.conf.beat_schedule = {# 名字随意命名'add-every-10-seconds': {# 执行tasks1下的test_celery函数'task': 'celery_tasks.task01.send_email',# 每隔2秒执行一次# 'schedule': 1.0,# 'schedule': crontab(minute="*/1"),'schedule': timedelta(seconds=6),# 传递参数'args': ('张三',)},# 'add-every-12-seconds': {#     'task': 'celery_tasks.task01.send_email',#     每年4月11号,8点42分执行#     'schedule': crontab(minute=42, hour=8, day_of_month=11, month_of_year=4),#     'args': ('张三',)# },
} 

运行结果:

 根据上述配置每6s执行task01发送邮件任务

注意:

# 周期性执行任务单元,要注意先启动beat进程而后执行worker单元
E:\desktop\my_drf\celerypro>celery -A celery_tasks beat
E:\desktop\my_drf\celerypro>celery -A celery_tasks worker -l info -P eventlet注意: 当打开beat后而若没有打开worker执行单元会导致beat进程不断向数据库中加入数据

 

  查看redis堆积的数据方法:cmd命令如下

 python脚本实现:

 celery结合django中集成的运用

# tasks
# celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
from mycelery.main import app
import timeimport logging
log = logging.getLogger("django")@app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
def send_sms(mobile):"""发送短信"""print("向手机号%s发送短信成功!"%mobile)time.sleep(5)return "send_sms OK"@app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
def send_sms2(mobile):print("向手机号%s发送短信成功!" % mobile)time.sleep(5)return "send_sms2 OK"# config
broker_url = 'redis://127.0.0.1:6379/15'
result_backend = 'redis://127.0.0.1:6379/14'# main
# 主程序
import os
from celery import Celery
# 创建celery实例对象
app = Celery("sms")
# import os
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1') # 注意: 默认配置要这样配置,下列的配置会找不到组件导致失败
# 把celery和django进行组合,识别和加载django的配置文件
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celerypro.settings.dev')
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")# 通过app对象加载配置
app.config_from_object("mycelery.config")# 加载任务
# 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称
# app.autodiscover_tasks(["任务1","任务2"])
app.autodiscover_tasks(["mycelery.sms",])# view 
from django.shortcuts import render,HttpResponse
from mycelery.sms.tasks import send_sms,send_sms2
from datetime import timedeltafrom datetime import datetime
def test(request):################################# 异步任务# 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决send_sms.delay("110")send_sms2.delay("119")# send_sms.delay() #  如果调用的任务函数没有参数,则不需要填写任何内容################################# 定时任务ctime = datetime.now()# 默认用utc时间utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())time_delay = timedelta(seconds=3) # 3s 发送消息task_time = utc_ctime + time_delayresult = send_sms.apply_async(["911", ], eta=task_time)print(result.id)return HttpResponse('ok')

启动Celery的命令

# 强烈建议切换目录到mycelery根目录下启动
# E:\desktop\my_drf\celerypro>celery -A mycelery.main worker --loglevel=info

运行结果:

http://www.sczhlp.com/news/17061/

相关文章:

  • 门户资源分享网站模板免费的网站
  • 深圳私人做网站抖音seo是什么意思
  • 银川网站怎么做seo口碑推广
  • 政府网站建设过程中存在的问题网络推广项目
  • 简历网站后怎样才能被谷歌 百度收录吗体验营销案例分析
  • 电子商务网站开发实训体会厦门推广平台较好的
  • 性视频免费真做片在线观看网站网站链接提交
  • 如何创造免费网站刷关键词排名
  • 专业建站提供商微商怎样让客源主动加你
  • 怎么做网站卖东西推广链接让别人点击
  • 做网站建设要学多久seo关键词优化外包公司
  • 开发一个网站要学什么软件关键词提取
  • 贵阳网站建设培训学校人教版优化设计电子书
  • 企业网站建设排名客服公司建网站流程
  • 独立外贸网站建设电商怎么做
  • 网站建设教学工作总结怎么网站排名seo
  • php mysql网站开发全程实例pdf今日热点新闻事件摘抄2022
  • scratch网站开发广州网站外包
  • 个人建设视频网站制作windows7优化大师
  • 网站免费建站黄seo专业课程
  • layui响应式网站开发教程如何做网络宣传推广
  • 外贸网站怎么做推广网站搭建模板
  • 如何将IBM FS Cloud容器应用公开到公网
  • 做网站到哪里做百度在线翻译
  • 英选 网站开发头条权重查询
  • 徐州网站建设费用360竞价推广客服电话
  • 可以做长页的网站1688关键词排名查询工具
  • 南京经济经济技术开发总公司一键优化清理加速
  • 北京房产网站建设长春最新发布信息
  • c 做网站方便吗免费关键词搜索工具