- 博客(84)
- 资源 (7)
- 收藏
- 关注
原创 python较为安全的关闭一个流的写法
阅读python的logging模块源码,这样关闭一个流stream = self.streamself.stream = Noneif hasattr(stream, "close"): stream.close()
2017-11-16 15:56:48
1281
原创 web开发者很容易困惑的地方
http协议实现的web接口,接收与发送数据,有没有可能发生丢包,表象是接受的数据不完整。答案: 不可能原因: tcp传输的可靠性,深入理解需知道tcp/ip协议的,建立连接三次握手,断开连接的四次握手如果有人问,http不是应答式的么,这里我们需要知道,htttp是应用层,TCP/IP协议层,不可混淆,举个例子,网卡把你的数据截断,你应用层是处理不了的。htt
2017-10-26 16:50:35
393
原创 CDN简介
CDN简介用户网络环境复杂,用户遍布全球,服务器站点压力大在国内,跨运营商访问非常慢,即使你机房都是双IP,双网卡,各省市的网络质量也存在差异。可通过http://www.pc841.com查看我国网络带宽性能报告为了各地区访问网络资源更快,很自然的想到了就近原则,避免因地域差异导致传输速度与稳定性CDN: Content Delivery Network即内容分发网络,到处建设节点,用户就
2017-10-23 14:42:21
593
原创 mysql梳理了一些常识,先记录
1. 查询缓存(相同的查询执行多次的时候,查询结果会被缓存)// 查询缓存不开启 $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // 开启查询缓存 $today = date("Y-m-d"); $r = mysql_query("SELECT username
2017-10-20 14:36:04
335
原创 python经常管理supervisor简单介绍
一般的在没有集成进程(服务)可视化管理前,我们需要一个进程管理工具,同时具备拉取,监控的功能。supervisor轻量好用1. 安装,不细说2. 配置,举个例子:指定环境,启动命令,日志[program:msg-push]environment=PYTHONPATH=:,LD_LIBRARY_PATH=/home/www/python_lib:command
2017-10-16 12:07:29
415
原创 tornado使用须知
一,tornado是单线程,基于select/epoll/poll监听fd读写事件的,事件驱动模型二,由于tornado的特性,则不能有任何的阻塞(IO阻塞与CPU等待), 如某个请求需要花费5秒才能完成, 则一秒tornado只能处理0.2个请求, 即使你加上20个线程异步处理,也只能每秒处理20 * 0.2 = 4 个def handler_request(self, requ
2017-10-13 14:26:22
539
原创 不使用多线程, 使用select, 实现http请求的异步
使用select实现ioloop, 实现http请求异步,有利于理解select(epool)模型, 代码如下:#!/bin/pythonimport selectimport timefrom http.client import HTTPConnectionclass Handler(object): passclass AsyncHTTPHandl
2017-09-30 11:39:12
608
原创 python2.6对json字符串有序的解析成有序的字典
在某些设计不合理的的加密方式下,生成的json字符串,解析成对象的时候,序保证字典key的先后顺序。Python2.6不支持,采取的办法是:1. 把Python2.7的json目录复制到工程目录,取名叫jsonx2. 修改几处import使无语法错误3. 参考它的encoder,实现如下代码:import jsonxfrom jsonx.encoder imp
2017-09-26 10:38:58
1294
原创 tornado版本及多线程情况梳理
python2.6 tornado-4.2-py26环境import tornado.ioloopimport tornado.webfrom tornado.web import asynchronousfrom concurrent import futures executor = futures.ThreadPoolExecutor(max_workers=2)def cal
2017-07-06 16:55:09
1204
原创 mysql索引
mysql存储比较char与varchar区别官方文档 https://dev.mysql.com/doc/refman/5.7/en/char.htmlint 固定为 4 bytesB+Tree索引d越大,索引性能越好,d的上限为:dmax=floor(pagesize/(keysize+datasize+pointsize))
2017-06-30 16:06:24
246
原创 python垃圾回收及闭包异常抛出
#coding: gbkimport sysdef foo(func): def bar(*args, **kwargs): ret = func(*args, **kwargs) print "done func" return ret return barclass Obj(object): def __
2017-05-31 16:40:30
423
原创 python源码PyObject简单解析
1. python一切皆定义, 对象定义object.h/* Define pointers to support a doubly-linked list of all live heap objects. */#define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ st
2016-07-21 12:03:32
3409
原创 使用python的yield实现任务调度.给定一个任务列表,每个任务轮流切换执行,类似于切片
任务:给定一个数N, 每次对这个数减1给定一个数N, 每次对这个数加的次数统计任务列表就是上面多个任务, 要求每个任务轮流执行(调度):#!/bin/python3.5#coding=utf8'''sched task yield'''def count_donw(n): while n > 0: print("count donw", n) yie
2016-07-14 15:00:00
1407
原创 I/0事件驱动实现异步curl,一
先来个简单的,在事件处理上面并没有实现异步#!/bin/pythonimport selectfrom http.client import HTTPConnectionclass Handler(object): passclass AsyncHTTPHandler(Handler): def __init__(self, url, io_loop, callba
2016-07-14 12:19:55
567
原创 根据cookbook, 多线程情况的事件驱动IO
模拟使用线程池, 事件驱动IO模型, 这里使用的select1. 采用对socket,初始化完成之后,内核状态是不可读,不可写(无东西可读)2. 线程池完成工作之后, 回调_complete, 把线程计算结果及回调函数放入pending的list3. 发送一个字节, 告诉内核select, 返回flieno那个socket可读,执行handle_receive把pending依次处理完
2016-07-12 17:56:54
550
原创 python-cookbook事件驱动的i/o模型
行行色色的事件驱动或异步I/O的包, 我们无法理解底层实现模型, 根据python的cookbook, 比较明了的体现了该模型, 便于今后理解及开发相关ioloop, eventloop。基于select实现的单进程单线程的事件轮询模型。 测试用telnet 127.0.0.1 8888可以多开几个窗口#!/usr/bin/env pythonclass EventHandle
2016-07-12 15:04:48
546
原创 测试需要修改系统时间之后, 引起https证书过期问题
开发测试的时候,我们经常需要倒退时间。倒推时间,请求https相关资源的时候,自然引起证书的问题: return self.__request(url) File "build/bdist.linux-x86_64/egg/curl/__init__.py", line 87, in __request self.handle.perform()error: (60,
2016-07-07 11:28:53
10055
原创 如果实现python字典的只读, 考虑字典内容有list, dict的嵌套问题
下面代码并没有实现, 预留后续继续研究:1. 完全模拟字典行为2. 只读3. 特别的在遍历,嵌套上面需考虑class _CfgData(object): """配置数据,主要为了实现类似JSON格式数据的ReadOnly。 @author: ligx@500.com """ def __init__(self, data): sel
2016-06-23 17:15:55
2181
原创 upd简单广播例子
给局域网同一网段发送广播包(同局域网不同网段暂时还去看)广播包发送者:#coding=gbk#!/python/binimport socketsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
2016-05-03 16:05:32
1142
原创 mysql查询语句speed select
1. 考虑索引参考文档http://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.htmlhttp://dev.mysql.com/doc/refman/5.5/en/select-speed.html一般Mysql的索引使用B-trees数据结构使用索引注意事项:1. 索引需出现在where条件语句中2. 多个索引, my
2016-04-29 16:33:31
981
原创 参考sqlalchemy.pool自写连接自动回收
#coding=gbk#!/bin/python2.6import MySQLdbimport weakreffrom concurrent import futuresimport timeimport threadingpool_executor = futures.ThreadPoolExecutor(max_workers=3)def
2016-04-21 15:21:30
2730
原创 mysql连接池, 连接的释放, 连接的回收, 连接释放机制
#!/bin/pythonfrom sqlalchemy.pool import QueuePoolimport threadingimport MySQLdbimport timedef creator(): c = MySQLdb.connect(host="192.168.41.76", db="test", user="root", passwd="root", po
2015-12-03 10:04:42
18641
原创 python 记录
1. 继承object与不继承区别还是挺大的,之后记录默认都继承object2. python重写方法如果父类要调用记得super3.
2015-09-10 12:15:35
513
原创 mysql锁-for update
文档:SELECT ... FOR UPDATE sets an exclusive lock on the rows read. An exclusive lock prevents other sessions from accessing the rows for reading or writing. 阻止其他session的读写锁,排他锁,在读取的行上面# c
2015-07-01 13:48:54
678
原创 shell基本
1. 按行读取文件#!/bin/bashexec < a.txtwhile read linedo echo $linedone2. shell日期u=`date "+%Y-%m-%d %H:%M:%S"`echo $uecho $u >> d.logkkkk3. 分号, 多行命令分割符号如:echo "begin bak..." ; cp $filenam
2015-06-23 14:19:47
434
原创 shell按行从文件读取, 分割成数组
cut -d 如果找不到分割符号, 就会输出原字符串,无聊-f后面是什么,加-s就什么都不输出了#!/bin/bash# 从文件中按行读取,每行分割成字符串, 形成数组# j=0while read linedo i=1 while : do str=` echo $line | cut -d ":" -f $i ` #echo
2015-06-08 13:53:57
23184
1
原创 python wsgi 规范 与java的servlet规范比较
1. wsgi 是python的特有规范, 与java的servlet规范一样, java特有搞这个规范干嘛呢:简单socket:执行下面代码, 在浏览器里面执行:http://localhost:8001/, 我们可以看到hello打印信息如下:#coding=utf8import socketso = socket.socket(socket
2015-05-29 11:22:32
6061
1
原创 python字典元素的删除
py在遍历字典的时候,一般的有涉及到满足条件则删除该元素办法1:a = {"a": "1", "b": "2"}for k,v in a.items(): if k == "b": del a[k] print a# {'a': '1'}办法2:a = {"a": "1", "b": "2"}f = filter(lambda i: i[0] !=
2015-05-18 10:50:07
6662
1
原创 看python的91个建议第7个建议, 常量写到同一个文件引发的一个问题
#coding=utf8import sysclass _const(object): class ConstError(TypeError): pass class ConstCaseError(ConstError): pass def __setattr__(self, name, value): i
2015-04-08 17:37:12
2519
原创 python的property简单实用
1. 一定要继承object2. setter不写,修改会报错3.getter非必需, 但是可以用来做额外的事class P(object): """ must extend object """ def __init__(self, v): self._v = v @property def v(self)
2015-04-07 17:31:26
549
原创 python logger
#coding=utf8import logging# logging.basicConfig(filename="test.log",format="[%(asctime)s]:[%(threadName)s]:[%(funcName)s]:%(levelname)s:%(message)s", level=logging.INFO)logging.info("===in
2015-01-12 17:11:02
976
原创 python调用dll
把C代码编译成dll, python可以直接调用from ctypes import *user32 = windll.LoadLibrary('user32.dll')user32.LockWorkStation()
2014-09-19 09:52:35
821
原创 python singleton
#coding=utf8class Singleton(object): """python单例 输出结果: __new__ __init__ __new__ __init__ x 28608176 x 28608176 """ def __init__(self, name): print
2014-08-21 16:48:02
872
原创 python 装饰器
#coding=utf8def wrapper(func): def proc(*args, **kwargs): print "wrapper foo proc" ret = func(*args, **kwargs) return ret return proc@wrapperdef foo(): print
2014-08-19 22:23:20
731
原创 Java调试打印堆栈信息
public class DebugUtil { public static void logCurrentThreadStack() { StackTraceElement[] stack = Thread.currentThread().getStackTrace(); StringBuffer sb = new StringBuffer();
2014-05-11 21:25:01
2292
原创 python with 简单示例
#!/usr/bin/python26#coding=utf-8import sysclass V(object): def __init__(self): print "__init__ invoke" def __exit__(self, type, value, traceback): print "__exit__"
2014-04-02 14:17:47
611
原创 selector demo
import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSock
2014-03-28 10:32:45
763
原创 python中文截取
username是已经进过utf-8编码之后的参数u = unicode(username,"utf-8")u = u[:4]+"*"u.encode('utf-8') 转成unicode之后,中文就是一个字节了,字母与汉字都是4个字节
2014-03-25 18:57:58
850
新闻发布系统源码,有前台后台,struts2+Hibernate 实现
2010-08-27
MVC宿舍管理系统,C++课程设计题目
2010-05-25
Java容器类List、ArrayList、Vector及map、HashTable应用
2010-04-27
C 八皇后问题,有注释
2009-12-23
数组实现任意进制转换,转换成二进制等
2009-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人