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

建设档案员证书查询网站企业文化形象墙设计

建设档案员证书查询网站,企业文化形象墙设计,怎么做网站广告代理商,网页设计学生作业Celery 常用于 web 异步任务、定时任务等。 使用 redis 作为 Celery的「消息代理 / 消息中间件」。 这里通过Flask-Mail使用qq邮箱延时发送邮件作为示例 pip install celery pip install redis pip install Flask-Mail1、使用flask发送邮件 使用 Flask-Mail 发送邮件需要进行…Celery 常用于 web 异步任务、定时任务等。 使用 redis 作为 Celery的「消息代理 / 消息中间件」。 这里通过Flask-Mail使用qq邮箱延时发送邮件作为示例 pip install celery pip install redis pip install Flask-Mail1、使用flask发送邮件 使用 Flask-Mail 发送邮件需要进行一下配置其中QQ邮箱授权码的获取方式如下所述 app Flask(__name__) app.config[SECRET_KEY] top-secret!# Flask-Mail configuration app.config[MAIL_SERVER] smtp.qq.com app.config[MAIL_PORT] 465 # 启用/禁用传输安全层加密 app.config[MAIL_USE_TLS] False # 启用/禁用安全套接字层加密 app.config[MAIL_USE_SSL] True app.config[MAIL_USERNAME] 我的QQ邮箱qq.com app.config[MAIL_PASSWORD] 我的QQ邮箱授权码 app.config[MAIL_DEFAULT_SENDER] 我的QQ邮箱qq.com# Celery configuration app.config[CELERY_BROKER_URL] redis://localhost:6379/0 app.config[CELERY_RESULT_BACKEND] redis://localhost:6379/0# Initialize extensions mail Mail(app)app.route(/send_mail) def index11():# sender发件人 recipients收件人msg Message(Hello, sender app.config[MAIL_DEFAULT_SENDER], recipients [目标邮箱qq.com])msg.body 来自python--flask框架发送的邮件内容~mail.send(msg)#发送Message类对象的内容return 发送成功 点进qq邮箱在设置里面点击账号向下滚动开启pop3服务获取授权码。 2、延时发送邮件 定义celery任务与flask基本一样 只是前面多了修饰符celery.task celery.task def send_async_email(email_data):Background task to send an email with Flask-Mail.msg Message(email_data[subject],senderapp.config[MAIL_DEFAULT_SENDER],recipients[email_data[to]])msg.body email_data[body]with app.app_context():mail.send(msg) app.route(/, methods[GET, POST]) def index():if request.method GET:return render_template(index.html, emailsession.get(email, ))email request.form[email]session[email] email# send the emailemail_data {subject: Hello from Flask,to: email,body: 来自python--flask框架延时发送的邮件内容~}if request.form[submit] Send:# send right awaysend_async_email.delay(email_data)print(here!--)flash(Sending email to {0}.format(email))else:# send in one minutesend_async_email.apply_async(args[email_data], countdown60)flash(An email will be sent to {0} in one minute.format(email))return redirect(url_for(index)) 3、生成带有状态信息进度条的异步任务 # bind为True会传入self给被装饰的方法 celery.task(bindTrue) def long_task(self):带有进度条以及状态报告的 异步任务verb [正在, 准备, 目前, 处于, 进行]adjective [全速, 努力, 默默地, 认真, 快速]noun [打开, 启动, 修复, 加载, 检查]message total random.randint(10, 50) # 随机取10~50的一个随机数for i in range(total):selectnow random.random()print(selectnow)# 拼接上面三个lsit 随机的生成一些状态描述if not message or selectnow 0.25:message {0} {1} {2}....format(random.choice(verb),random.choice(adjective),random.choice(noun))# 更新Celery任务状态self.update_state(statePROGRESS,meta{current: i, total: total,status: message})time.sleep(1)# 返回字典return {current: 100, total: 100, status: 任务完成!,result: 42}app.route(/longtask, methods[POST]) def longtask():task long_task.apply_async()return jsonify({}), 202, {Location: url_for(taskstatus, task_idtask.id)}app.route(/status/task_id) def taskstatus(task_id):task long_task.AsyncResult(task_id)# print(task.state)if task.state PENDING:# PENDING的时候 如果一直PENDING可能是celery没开启response {state: task.state,current: 0,total: 1,status: Pending...}elif task.state ! FAILURE:# 加载的时候response {state: task.state,current: task.info.get(current, 0),total: task.info.get(total, 1),status: task.info.get(status, )}if result in task.info:response[result] task.info[result]else:# 报错时候的输出response {state: task.state,current: 1,total: 1,status: str(task.info), # this is the exception raised}return jsonify(response) 4、完整代码 文件结构 --- current--- templates--- index.html--- asyn_001.py这个是asyn_001.py import os import random import time from flask import Flask, request, render_template, session, flash, redirect, \url_for, jsonify from flask_mail import Mail, Message from celery import Celeryapp Flask(__name__) app.config[SECRET_KEY] top-secret!# Flask-Mail configuration app.config[MAIL_SERVER] smtp.qq.com app.config[MAIL_PORT] 465 # 启用/禁用传输安全层加密 app.config[MAIL_USE_TLS] False # 启用/禁用安全套接字层加密 app.config[MAIL_USE_SSL] True app.config[MAIL_USERNAME] 我的QQ邮箱qq.com app.config[MAIL_PASSWORD] 我的QQ邮箱授权码 app.config[MAIL_DEFAULT_SENDER] 我的QQ邮箱qq.com# Celery configuration app.config[CELERY_BROKER_URL] redis://localhost:6379/0 app.config[CELERY_RESULT_BACKEND] redis://localhost:6379/0# Initialize extensions mail Mail(app)app.route(/send_mail) def index11():# sender发件人 recipients收件人msg Message(Hello, sender app.config[MAIL_DEFAULT_SENDER], recipients [目标邮箱qq.com])msg.body 来自python--flask框架发送的邮件内容~mail.send(msg)#发送Message类对象的内容return 发送成功# Initialize Celery celery Celery(app.name, brokerapp.config[CELERY_BROKER_URL]) celery.conf.update(app.config)celery.task def send_async_email(email_data):Background task to send an email with Flask-Mail.msg Message(email_data[subject],senderapp.config[MAIL_DEFAULT_SENDER],recipients[email_data[to]])msg.body email_data[body]with app.app_context():mail.send(msg)app.route(/, methods[GET, POST]) def index():if request.method GET:return render_template(index.html, emailsession.get(email, ))email request.form[email]session[email] email# send the emailemail_data {subject: Hello from Flask,to: email,body: 来自python--flask框架延时发送的邮件内容~}if request.form[submit] Send:# send right awaysend_async_email.delay(email_data)print(here!--)flash(Sending email to {0}.format(email))else:# send in one minutesend_async_email.apply_async(args[email_data], countdown60)flash(An email will be sent to {0} in one minute.format(email))return redirect(url_for(index))# bind为True会传入self给被装饰的方法 celery.task(bindTrue) def long_task(self):带有进度条以及状态报告的 异步任务verb [正在, 准备, 目前, 处于, 进行]adjective [全速, 努力, 默默地, 认真, 快速]noun [打开, 启动, 修复, 加载, 检查]message total random.randint(10, 50) # 随机取10~50的一个随机数for i in range(total):selectnow random.random()print(selectnow)# 拼接上面三个lsit 随机的生成一些状态描述if not message or selectnow 0.25:message {0} {1} {2}....format(random.choice(verb),random.choice(adjective),random.choice(noun))# 更新Celery任务状态self.update_state(statePROGRESS,meta{current: i, total: total,status: message})time.sleep(1)# 返回字典return {current: 100, total: 100, status: 任务完成!,result: 42}app.route(/longtask, methods[POST]) def longtask():task long_task.apply_async()return jsonify({}), 202, {Location: url_for(taskstatus, task_idtask.id)}app.route(/status/task_id) def taskstatus(task_id):task long_task.AsyncResult(task_id)# print(task.state)if task.state PENDING:# PENDING的时候 如果一直PENDING可能是celery没开启response {state: task.state,current: 0,total: 1,status: Pending...}elif task.state ! FAILURE:# 加载的时候response {state: task.state,current: task.info.get(current, 0),total: task.info.get(total, 1),status: task.info.get(status, )}if result in task.info:response[result] task.info[result]else:# 报错时候的输出response {state: task.state,current: 1,total: 1,status: str(task.info), # this is the exception raised}return jsonify(response)if __name__ __main__:app.run(debugTrue) 这个是index.html htmlheadtitleFlask Celery 示例/titlestyle.progress {width: 100%;text-align: center;}/style/headbodyh1Flask Celery 示例/h1h2Example 1: 发送异步邮件/h2{% for message in get_flashed_messages() %}p stylecolor: red;{{ message }}/p{% endfor %}form methodPOSTpSend test email to: input typetext nameemail value{{ email }}/pinput typesubmit namesubmit valueSendinput typesubmit namesubmit valueSend in 1 minute/formhrh2Example 2: 生成进度条以及状态报告/h2!--button οnclickstart_long_task();Start Long Calculation/buttonbrbr--button idstart-bg-jobStart Long Calculation/buttonbrbrdiv idprogress/divscript src//cdnjs.cloudflare.com/ajax/libs/nanobar/0.2.1/nanobar.min.js/scriptscript src//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js/scriptscriptfunction start_long_task() {// add task status elementsdiv $(div classprogressdiv/divdiv0%/divdiv.../divdivnbsp;/div/divhr);$(#progress).append(div);// create a progress barvar nanobar new Nanobar({bg: #44f,target: div[0].childNodes[0]});// send ajax POST request to start background job$.ajax({type: POST,url: /longtask,success: function(data, status, request) {status_url request.getResponseHeader(Location);console.log(status_url, status_url,nanobar, nanobar, div[0], div[0])console.log(data, data)update_progress(status_url, nanobar, div[0]);},error: function() {alert(Unexpected error);}});}function update_progress(status_url, nanobar, status_div) {// send GET request to status URL$.getJSON(status_url, function(data) {// update UIpercent parseInt(data[current] * 100 / data[total]);nanobar.go(percent);$(status_div.childNodes[1]).text(percent %);$(status_div.childNodes[2]).text(data[status]);if (data[state] ! PENDING data[state] ! PROGRESS) {if (result in data) {// show result$(status_div.childNodes[3]).text(Result: data[result]);}else {// something unexpected happened$(status_div.childNodes[3]).text(Result: data[state]);}}else {// rerun in 2 secondssetTimeout(function() {update_progress(status_url, nanobar, status_div);}, 2000);}});}$(function() {$(#start-bg-job).click(start_long_task);});/script/body /html5、启动任务 终端cd到current文件夹所在目录 启动asyn_001程序即可观察到异步任务的执行。 参考1 Celery实现异步任务和定时任务的简单示例 参考2 Using Celery with Flask
http://www.w-s-a.com/news/452356/

相关文章:

  • 广州建站商城南阳高质量建设大城市网站
  • 网站建设合同封面模板做代炼的网站
  • 外贸网站建站要多少钱南昌优化排名推广
  • 做公司网站的尺寸一般是多大企业管理网站
  • 苏州网站设计公司兴田德润i简介做签证宾馆订单用啥网站
  • 网站页面设计工具做网站租空间
  • 做智能网站系统百度提交入口
  • 网站建设代理商电话网站规划和建设方案
  • 双桥区网站制作seo 首页
  • 电子商务网站建设前期准备wordpress域名指向二级目录
  • 汕头建站网站模板淮北做网站电话
  • 手机做logo用什么网站服务器安全防护
  • 课程分销的网站怎么做北京企业网站建设方案
  • 吴兴区建设局网站湖北企业网站建设
  • 网页与网站的区别是什么2023年8月份新冠
  • 唐山网站建设外包公司安卓手机怎么搭建网页
  • 国内做网站最大的公司计量检测网站平台建设方案
  • 重庆沛宣网站建设网页制作初学者
  • php网站漂浮广告代码网络营销跟网站推广有啥区别
  • wordpress调用图片优化型网站建设的基本要求
  • 郑州模板网站建设策划公司做网站怎么赚钱滑县电
  • 东昌府聊城网站优化秦皇岛市妇幼保健院
  • 做网站能赚钱吗网页升级访问通知天天更新
  • 做网站使用什么软件的免费招聘网
  • 宁波网站建设公司推荐哪家淄博网站制作公司服务
  • 做网站网页挣钱不免费主题wordpress
  • 如何提高你的网站的粘性手机网站整站模板下载
  • 学校网站建设制度网站相关推荐怎么做
  • 昌图网站wordpress 视频外链
  • 企业网站要怎么建设重庆住房城乡建设部网站