摘要: 近期正在学习QT。用Python很久了,QT入门中。PySide做的太棒了。代码不需要修改直接可以运行在Nokia N9上。本代码的C++版本在http://developer.qt.nokia.com/doc/qt-4.8/widgets-imageviewer.html目的是学习不是为了实现一个软件,所以做了不少的简化。QPixmap和QImage都能显示图片,可还是用QImage读取,放QPixmap显示,我查了资料 http://www.developer.nokia.com/C ... 8%E8%A7%A3%E6%9E%90总结下来QPixmap依赖于硬件,性能更好消耗资源,QIma 阅读全文
posted @ 2012-01-27 21:30 源姜 阅读(878) 评论(1) 推荐(0) 编辑

2018年6月20日

1.问题

上个学期,给学校写了一个数据服务,主要从oracle里面读取一些数据供查询使用,非常快速的用web.py搭建了起来。调试顺利,测试正常,上线!接下来就是挨骂了,我铁定知道会卡,但是没想到会那么卡。在线10几个人就已经无法访问了。我自己这里调试还是可以正常访问的,那就是负载量不够呗。上nginx,起8个进程。好了不少喂,但是还是有学生抱怨,时而正常,时而不正常。我就知道,快速完成的东西,大量用户的东西,这次web.py有些顶不住了,期间还不死心上了一些组件来优化进程访问,不一一细说,因为都没有明显好转,啥独角兽,啥uwsgi,啥fastCGI,统统效果不明显。肯定也是我水平不够。这时候不得不再拿出几年前用来解决异步请求的tornado来。

2.啥是异步问题

以web.py为例,一般性开发管理系统由于使用的用户比较少,几乎可以忽略这个问题,或者通过增加负载用多进程来解决这个问题,因为一个简单的小系统同时又8~10人在线使用就很不错了。web.py在单个进程服务的时候,如果一个请求消耗的时间很长,另外的请求就会被阻塞,等待第一个请求得到响应完成后才会被响应,这就是阻塞问题,解决阻塞问题的方法就是启用异步请求。本来在其他开发语言里这是个简单的问题,但是在python里,因为Python自身的设计就是单进程的,稍微麻烦了一些,仔细研究还有很多好玩的事情。

3.我的解决

第一步是换一个支持异步的tornado,第二步是在tornado中启用异步。tornado的异步也有不少的方法,但是从应用角度来看,我觉得最终我选择的这个方法对于原有系统结构的冲击比较小。

3.1 创建响应请求的基类WxBaseView

#coding=utf-8
__author__ = 'jy@cjlu.edu.cn'
from concurrent.futures import ThreadPoolExecutor
from tornado.web import RequestHandler
from web.utils import storage
opt_users = d_users()
class WxBaseView(RequestHandler):
    executor = ThreadPoolExecutor(100)

3.2 所有url实现类继承这个基类

#coding=utf-8
from tornado.concurrent import run_on_executor
class List(WxBaseView):
    @run_on_executor
    def get(self):
        self.set_header("Content-Type", "text/html; charset=UTF-8")
        self.set_header("Access-Control-Allow-Origin", "*")
        self.write("hello tornado!")
    @run_on_executor
    def post(self):
        self.write("hello tornado!")

这里注意一个要点,就是在响应函数get和post前增加@run_on_executor这个装饰器,而这个装饰器其实调用的是我们在基类里设置的ThreadPoolExecutor,这里我们设置了这个线程池是100个。

4.对于web.py项目迁移到tornado

这个的修订方法对于解决用web.py快速开发的业务系统来说,代价非常的小,而且上线效果马上见效,比啥优化都有效。因为你再也不用因为一个耗时请求卡住整个进程了。100个线程池已经足以对付300个以上的在线用户了。

posted @ 2018-06-20 09:38 源姜 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 1.crontab简单使用 cmd 其实就是5个星星的事情,随便百度一下吧 5个时间标签用来标注执行的设定。比如每5分钟执行一次 /5 cmd 要特别注意 2.有些命令在命令行里执行很好,到了crontab里面不能正常执行,就是因为环境变量问题。 crontab在执行命令的时候不会去执行环境变量的那 阅读全文
posted @ 2018-06-20 08:19 源姜 阅读(2427) 评论(0) 推荐(0) 编辑
摘要: 1.问题 一般使用springboot都会引用springboot作为parent,在实际项目中web只是系统模块的一个子集。当然你可以做两个项目来管理,一个项目用来做各种支持包,一个项目专门做web,但是这样不仅调试不方便而且将面临更多的隐患,比如发布前的版本控制问题等。 所以最优方案已定是将Sp 阅读全文
posted @ 2018-06-20 08:19 源姜 阅读(3256) 评论(0) 推荐(0) 编辑
摘要: 1.问题 开发时候,将xml和properties放resources,直接可以访问到,然而打包后这两个文件也一同被打包到jar包里面,如果发布后想修改就会比较麻烦,所以希望将xml配置文件和properties放在jar包以外来做,这样就可以动态来指定环境。 2.分析 我们查看sessionfac 阅读全文
posted @ 2018-06-20 08:18 源姜 阅读(1407) 评论(0) 推荐(0) 编辑
摘要: 1.说说logback 在java的世界里面好像从来只有log4j,因为它是在太有名气了。说实话,我也没觉得它那里不好,至少在我自己的项目里,它工作的好好的。但是主流有一种声音,在慢慢的放弃它,最始作俑者是log4j的作者,也是logback的作者,他自己说的,维护越来越困难,索性开个新的。于是就是 阅读全文
posted @ 2018-06-20 08:17 源姜 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 1.问题 springboot开发时候,一般将文件放在resources目录,但是发布后想修订文件或是开发时候修改了文件内容一般需重新打包或者重启动才能达到效果; 2.原因 将资源文件打包入jar包,访问的是编译的结果,所以运行后访问的不是源码目录中的文件。致使修改效果要重新编译才能生效。一般可以妥 阅读全文
posted @ 2018-06-20 08:17 源姜 阅读(1214) 评论(0) 推荐(0) 编辑
摘要: jvm内存调优的一些记录 java内存调优的方法和过程 可以使用 jmap heap pid号 查看,例如pid是9300,执行的结果可能是这样的。 我们最关注的是Old Generation的占用情况。从数据上看到占用大约17.49m。 按照java官方的说明来配置的话计算的基数是老年时代存活实例 阅读全文
posted @ 2018-06-20 08:16 源姜 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 1.一个常见的问题就是如何读取excel。 这里面有几个分支的问题,一个是如何使用poi读取excel,网上例子很多,但是这只解决了第一步。如何将excel读取入一定的数据结构这是第二个问题,还有就是读取到数据了以后如何存放,如何将其转换成我们希望的对象?这些问题一个比一个在应用的更高层级上,也就是 阅读全文
posted @ 2018-06-20 08:16 源姜 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 最近发生一个小故障,调试好的项目,发布成jar包后无法找到oracle的驱动,研究了一下解决了。记录一下。 写了一个run.sh脚本 这里特别注意两点。 Djava.ext.dirs=./lib,配置jar包的寻找路径, Doracle.jdbc.thinLogonCapability=o3,配置o 阅读全文
posted @ 2018-06-20 06:55 源姜 阅读(4278) 评论(0) 推荐(0) 编辑
摘要: 1 # coding: utf-8 2 import codecs 3 from bson.json_util import dumps 4 from config import s_host, s_port, s_indexer 5 from models.gatherinfos import opt_infos 6 import sphinxapi 7 8 ... 阅读全文
posted @ 2018-06-20 06:48 源姜 阅读(308) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示