`
thirdson
  • 浏览: 5015 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

百e购开发日记(三)

阅读更多

e 购开发日记(三)

批量处理( JOB

 

系统中很多操作可能很费时,实时的处理势必影响系统的体验性。比如一个耗时的验证,或者需要其他系统协同的操作, J2EE 平台下我们有可以依赖 JMS 简单把请求塞到一个 Topic/Queue 中,由监听者再慢慢的处理消化。当然 JMS 是复杂的,有的系统的实时性要求可能不那么很高, 他可能通过每过几个小时或者几十分钟 FTP 一个文件过来,实现系统间的异步协调。

 

下面就拿百 e 购里需要异步批量处理的几个 JOB 为例来简单说明一下。好友间的操作信息分享,或者被关注事物的变动通知,都是比较耗时的操作。那么当一个好友发生一个可以共享的操作,比如和另外一个人成为了好友。这个操作不会被马上发送到他 / 她的其他好友那里去。会有一个后台的进程每过 10 分钟或不等把还没有发送的操作一个个发送给他 / 她的好友。

 

OK, 基本的思想就是这个样子,往往一个系统的实时性不是想象的那么苛刻,有的时候往往费力不讨好。退一步海阔天空,简单易用的思想和方法才是王道。

 

批量处理的部署, 有成熟的自动部署工具 Unicenter Autosys Job Management   他有自己的一套叫 JIL Job Information Language )语言 , 具体的语法例子可以参考: Autosys - A Job Scheduling tool :

/* ----------------- SAP_UAT_MU03_C ----------------- */

insert_job: SAP_UAT_MU03_C job_type: c

command: /local/SAP/processCheckUAT.sh

machine: MU03-UAT

owner: admin@MU03-UAT

permission: gx,wx,mx,me

days_of_week: all

start_times: "15:00, 14:00"

description: "Job used for Run testing of process"

alarm_if_fail: 1

max_exit_success: 1
 

 

语法很简答, 很容易看懂,这个玩意有点小 Bug, 有的时候很让你抓狂。

 

但是一般我们虚拟机提供商可能没有这个玩意, 我们只好自己动手了用 crontab, 希望你的虚拟机提供商给你开通了此权限。 Crontab  使用 cron expression 具体自己上网产看看就知道了。

 

*/21 * * * * cd /{{MY_PROEJCT_HOME}};python job_email.py
 

 

上面的语法意思就是每过 21 分钟执行一个我工程目录下的 python 程序 job_email.py

把你需要的 JOB 定义到一个文件中 crontab  {{JOB_FILE}} ;运行后使用 crontab –l 查看是否部署正确。

Django 环境下如果你的独立运行的 JOB 没有涉及工程里面的 Model 的话,不需要预先运行 settings.py ,一旦你需要链接数据库查询的话,需要预先运行 settings.py 或者直接从 django-admin.py 命令进入, 但是这个总是觉得让人有的约束,其实 django-admin.py 无非就是帮你初始化你的 settings.py  设置, 查看看后,我们自己也可以在我们的入口程序内修改:

#!/usr/bin/python

#-*-coding:UTF-8-*-#

import os, sys

sys.stdout = sys.stderr

sys.path.append('/{{PROJECT_PARENT}}')

sys.path.append('/{{PROJECT_HOME}}')

os.environ['DJANGO_SETTINGS_MODULE'] = '{{PROJECT_NAME}}.settings'

 

from django.core.management import setup_environ

import logging

logger = logging.getLogger('job')

 

try:

    import settings # Assumed to be in the same directory.

except ImportError:

    import sys

    logger.error("Bla bla....")

    sys.exit(1)

 

if __name__ == "__main__":

    setup_environ(settings)

 

logger.warning('Preparing to send out the email..')

logger.warning("-" * 72)

# Do the setting job----------------------

logger.warning("-" * 72)
 

 

 

这样后我们独立运行的时候就不需要在走 django-admin.py 过一下了。

 

下一讲,将是系统的静态资源的处理,特别是和 Django 相联系比较紧密的部分。还有部分在 Django 下如何处理图像资源。

0
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    高效e人企业绿色版

    高效e人是由重庆易飞科技有限公司(简称“易飞科技”)开发的一款功能强大、操作简单、受用户欢迎的办公自动化(OA)软件。高效e人分个人版、企业版和免费版,集通讯录、日程安排、任务计划、事务提醒、万年历、日记...

    微信小程序demo、微信小程序开发教程、小程序快速入门,新版SDK DEMO请查看.zip

    如是之前平台老用户则不需要重复申请账号,并且打通之前的Android,IOS,等平台数据,本示例整合了常用的功能,开发请按照以下步骤操作。将sdk引入到微信小程序中将utils目录下bmob.js,underscore.js复制至项目中...

    开心网网站设计分析.pdf

    开心网的系统架构由基础工具、社交游戏和其他应用三大模块构成。具体功能如照片管理、日志管理、转帖、社交游戏等。系统中,用户和管理员有不同权限,如管理员具有内容审核和用户管理权限。 3. **用例图** 用例...

    2023彩妆行业报告.pptx

    行业主要由国际知名品牌如Chanel、Dior、MAC和Estée Lauder主导,但国内品牌如完美日记、花西子等新兴品牌亦在市场中崭露头角,通过线上渠道和社交媒体营销快速获得市场份额。 2023年,彩妆市场的消费群体不再局限...

    myBase Desktop V7.0.0 B22 专业版

    myBase 是一款用于分类管理自由格式资料的数据库软件,对个人用户在微软视窗( Windows )桌面上 实现文档、知识、笔记、日记、图片和网页的分类管理任务相当有帮助。 myBase 7.x 内容格式已由 RTF 升级为 HTML 格式...

Global site tag (gtag.js) - Google Analytics