Backen-Development record 1
单例模式
在应用这个模式时,单例对象的类必须保证只有一个实例存在。
服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
- __new__实现
- 用装饰器实现单例模式
普通、静态方法、类方法
普通方法传入的第一个参数必须是self(当然也可以不用self,官方要求尽量用self),self是指实例对象本身;
静态方法无需传参;
类方法传入的第一个参数必须是class,是指类本身。
并发
Python的内存利用率
使用多线程:单核100% 双核不到50% 四核不到30%,涉及到叫GIL(全局解释器锁)的东西
但是多线程还是很有用的,比如网络爬虫、文本处理等等。这时候由于网络情况和I/O的性能的限制,
Python解释器会等待读写数据的函数调用返回,这个时候就可以利用多线程库提高并发效率了。
需要使用多进程;
Java使用多线程则可以达到100%利用率
生产者-消费者模式
通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯
队列在并发开发中最常用的。
我们借助「生产者/消费者」模式来理解:生产者把生产的「消息」放入队列,消费者从这个队列中对去对应的消息执行。
事务:select @@tx_isolation
概念:应用程序中一系列操作,所有操作必须成功完成,否则每个操作中所作的所有更改都会被撤消。
结束条件
1.事务中步骤全部成功执行,事务提交
2.如果其中一个步骤失败,发送回滚操作,前面步骤取消
四个特征
原子性:数据库逻辑单位,要么各操作都做,要么都不做
一致性:数据库只包含成功事务提交的结果
隔离性:一个事务的执行不能被其他事务干扰
持续性:一个事务一旦提交,他对数据库中的数据改变就是永久性的
四种隔离级别
SQL标准定义了4类隔离模式,用来限定事务内外的哪些改变是可见的,哪些是不可见的。
- read uncommit读取未提交内容:所有事务都能看到其他未提交事务的执行结果。
- read commit读取提交内容:(大多数据库系统的默认级别,非mysql),一个事务只能看见已经提交事务所作的改变。
- repeatable read可重读:(Mysql默认),他确保同一事务的多个实例在并发读取数据时看到同样的数据行。
- serializable可串行化:最高的隔离级别,强制事务排序,使之不能相互冲突,在每个读的数据行上加上共享锁。
Redis
nosql 开源,C语言编写的、Key-Value内存告诉数据库,
存储类型string、list、set、set、hash ,单个value的最大限制是1GB,
队列技术,串行访问,单进程单线程
数据淘汰策略:
1.从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
2.从已设置过期时间的数据集中挑选要过期的数据淘汰
3.从已设置过期时间的数据集中任意选择数据淘汰
服务器
1.买一个云服务器,得到公网ip
2.linux用SSL打开服务器,windows使用putty打开服务器
3.运行的时候创建虚拟环境
4.传输python项目文件(FileZilla)
4.安装一个screen(python)将程序在后头运行
web服务器
B/S架构,Apache:socker监听,工作队列。
客户端发送请求,服务器解析请求,读取其他信息,完成请求动作,关闭文件和网络连接
如何在云服务器运行多个python脚本
- 多终端运行:开sshd服务,安装xshell,多开些会话
- 后台运行:nohup xx.py;
- 守护进程方式:uwsgi/gunicorn/supervisor;
- docker方式:docker镜像,运行container
python事件驱动模型(IO模型)
事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。
它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。
Linux
io模式
- 阻塞 I/O(blocking IO)
- 非阻塞 I/O(nonblocking IO)
- I/O 多路复用( IO multiplexing)
- 信号驱动 I/O( signal driven IO)
- 异步 I/O(asynchronous IO)
通信
- 管道:进程间通信
- 消息队列:消息的链表存放在内核中
- SOCKET:它可用于不同机器间的进程通信
负载均衡
主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题
DNS服务器里可以内部负载均衡和全局负载均衡
缓存存储静态内容、根域名服务器、顶级域名、权威域名
Backen-Development record 1的更多相关文章
- [转] Agile Software Development 敏捷软件开发
原文作者:kkun 原文地址:http://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷是什么 ...
- 微软职位内部推荐-Software Development Engineering II
微软近期Open的职位: Job Title: Software Development Engineering II Work Location: Suzhou, China Enterprise ...
- 微软职位内部推荐-Senior Development Engineer
微软近期Open的职位: Job Title: Senior Software Development Engineering Work Location: Suzhou, China Enterpr ...
- 微软职位内部推荐-Software Development Engineer 2
微软近期Open的职位: SDE II Organization Summary: Engineering, Customer interactions & Online (ECO) is l ...
- 敏捷软件开发 Agile software Development(转)
原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...
- 微软职位内部推荐-Software Development Engineer II
微软近期Open的职位: Job Title:Software Development EngineerII Division: Server & Tools Business - Comme ...
- 微软职位内部推荐-Sr Development Lead-OSG-IPX
微软近期Open的职位: Job Summary:Be part of Microsoft's strategy to deliver a great input experience across ...
- Step-by-Step Guide to Portal Development for Microsoft Dynamics CRM - 摘自网络
The Challenge Oftentimes in the world of Dynamics CRM, the need arises for non-CRM users to gain acc ...
- Using QEMU for Embedded Systems Development
http://www.opensourceforu.com/2011/06/qemu-for-embedded-systems-development-part-1/ http://www.opens ...
- Software development skills for data scientists
Software development skills for data scientists Data scientists often come from diverse backgrounds ...
随机推荐
- sass之mixin的全局引入(vue3.0)
sass之mixin的全局引入(vue3.0) 1.scss文件(mixin.scss) /* 渐变 */ @mixin gradual($color, $color1){ background: $ ...
- C# 斐波那契数列 第n项数字/前n项的和
static void Main(string[] args) { int a = Convert.ToInt32(Console.ReadLine()); //求第n位数字是多少 Console.W ...
- 基于Scrapt框架的全站数据爬取
创建scrapy工程项目,除了爬虫文件中的代码需要略微修改,其他模块用法相同(如中间件,管道等): 爬虫文件代码流程 导入链接提取器 from scrapy.linkextractors import ...
- (十二)Linux Kernel suspend and resume
一.对于休眠(suspend)的简单介绍 在Linux中,休眠主要分三个主要的步骤: 1) 冻结用户态进程和内核态任务 2) 调用注册的设备的suspend的回调函数, 顺序是按照注册顺序 ...
- 建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
在Windows平台上主要有两个版本的Socket Api函数:WinSock 1.1和WinSock 2.2 , 2.2版本默认兼容1.1版本,1.1 winsock.h wsock32.lib w ...
- debian docker环境搭建
环境(阿里): 登陆到系统: 我们主要看执行结果截图(所有命令都进行复制) 卸载旧版本: 使用 APT 安装: 这里 输入 y 然后等待执行结束 添加软件源的 GPG 密钥. 一开始我是手打的命令, ...
- 更新对象sql语句
可以这么理解,我们以0为临界值,控制 OR 前 或者 OR后面部分的执行,为啥不是大于0作为临界值,因为这是int型主键. 之前我觉得这不就是炫酷嘛,这么些实际场景在哪里?下面来介绍一下实际的应用 ...
- 认识并初步应用GitHub——C++
好好学习,天天向上 一.这是一个根据规定的开头 GIT的地址 https://github.com/Notexcellent GIT的用户名 Notexcxllent 学号后五位 82405 博客地址 ...
- bug的全部
BUG 的生命周期 BUG 的生命周期 Bug-->软件程序的漏洞或缺陷 Bug 的类型:代码错误.设计缺陷.界面优化.性能问题.配置相关.安装部署.安全相关.标准规划.测试脚本....其他(功 ...
- Python——变量的作用域
原创声明:本文系博主原创文章,转载及引用请注明出处. 1. 在编程语言中,变量都有一定的作用域,用来限定其生命周期,且不同类型的变量作用域不同. 在Python中解释器引用变量的顺序(优先级)为:当前 ...