• apscheduler定时任务

    使用apscheduler定时任务,可以使用interval任务+cron任务,interval定时更新cron配置信息,cron则实现作业计划。

    通常用法

    from apscheduler.schedulers.blocking import BlockingScheduler
    sched = BlockingScheduler()
    
    def my_job():
        print 'hello world'
    
    # 使用修饰器
    @sched.scheduled_job('cron', id='my_job_id', second=10)
    def hello():
        print "hello decorate"
    
    # 轮循
    sched.add_job(my_job, 'interval', seconds=5)
    # 定时计划
    sched.add_job(my_job, 'cron', second=5, minute=1, hour=12, day_of_week=2)
    sched.start()
    

    在tarnado中用法

    import tornado
    from apscheduler.schedulers.tornado import TornadoScheduler
    sched = TornadoScheduler()
    
    def my_job():
        print sched.get_jobs()
    
    sched.add_job(my_job, 'interval', seconds=5, id="1")
    sched.start()
    
    tornado.ioloop.IOLoop.instance().start()
    

    任务触发器比较

    很多情况下,任务是根据数据库调整触发时间,时间改变了,如何判断触发器是否变化? 生成新trigger然后,专程字符串比较比较

    # 触发器比较
    str(job.trigger) != str(trigger)
    # 修改触发器
    sched.reschedule_job(job.id, trigger=trigger)
    
  • 什么是经验

    经是准则,道之常者;验是验证。 通过亲身验证而掌握的准则,称为经验。 工作经验、人生经验中如果不包含准则,只能称为心得体会而已。

    程序员这个行业最多五十年,真有准则吗? 假如一条规则寿命是五十年,可用一生,对我而言它可以称为准则。五十多年、无数科学研究,成果在哪里,有这样成果吗?当然有!

  • spf13无法输入中文

    为gvim安装spf13后,发现无法输入中文,原因是ibus的下拉提示与spf13的下拉提示冲突。最理想的解决办法是spf13下拉提示能够判断输入法状态,处在英文状态用spf13的下拉提示,处在中文状态用ibus下拉提示. 但是不可行。下面是我选择使用fcitx输入法解决这个问题.

    • 安装
    sudo yum install fcitx-pinyin
    sudo yum install fcitx-configtool
    sudo yum install im-chooser
    
    • 设置快捷键
    fcitx-configtoool
    
    • gsettings配置
    gsettings set org.gnome.settings-daemon.plugins.keyboard active false
    
    • 开机设置
      在im-chooser中选择使用fcitx
    im-chooser
    
  • python动态加载是否影响性能

    说明

    看见这个标题觉得有些好笑。受先入为主观念影响,心里隐约觉得动态加载有点慢,最近受一些启发,开始思考java反射、python动态加载的性能问题. 下面是测试python不同加载方式的性能

    示例

    有m1.py m2.py m3.py三个文件,内容如下

    class Test:
        def func(self):
            pass
    

    测试主体

    #encoding=utf-8
    import time
    import importlib
    import m1
    from m3 import Test as m3_Test
    
    class Test:
        def func(self):
            pass
    
    def main():
        #A import
        nums = range(1, pow(10, 7))
        start = time.time()
        for i in nums:
            m1.Test()
        end =  time.time()
        print "%sms" % (( end - start ) * 1000)
    
        #B import_module
        im = importlib.import_module("m2")
        start = time.time()
        for i in nums:
            im.Test()
        end = time.time()
        print "%sms" % ((end - start) * 1000)
        #C from import
        start = time.time()
        for i in nums:
            m3_Test()
        end = time.time()
        print "%sms" % ((end - start) * 1000)
    
        #D 当前类
        start = time.time()
        for i in nums:
            Test()
        end = time.time()
        print "%sms" % ((end - start) * 1000)
    
    if __name__ == "__main__":
        main()
        '''
        结果
            1619.62890625ms
            1586.80582047ms
            1359.44890976ms
            1369.25506592ms
        '''
    

    结论

    可以得到几点结论:
    * A与B比较: 动态加载并不会慢
    * A与C比较: 通过from减少导入内容,可以加快载入速度
    python本身就是动态语言,动态加载不会对性能产生影响,所以,尽管用,这是非常好的一个特性.

  • python与内建函数重名

    自定义函数与内建函数重名,又不想改为,怎么办?加前缀.

    例如:list可以使用builtin.list区分

    import __builtin__
    
    def list(f):
        '''
        将返回结果转为list
        '''
        def __call(*args, **kwargs):
            return __builtin__.list(f(*args, **kwargs))
        return __call
    
  • django如何使用restful风格

    个人比较喜欢restful风格,以为django要安装rest framework才支持restful. 偶然发现只需继承View类即可.

    from django.views.generic import View
    
    class TaskView(View):
        # 获取
        def get(self, request, *args, **kwargs):
            print request.GET
        # 新建
        def post(self, request, *args, **kwargs):
            print request.POST
        # 更新
        def put(self, request, *args, **kwargs):
            print request.body
        # 删除
        def delete(self, request, *args, **kwargs):
            print request.body
    
    # 路径配置
    #url(r'task/$', TaskView.as_view()),
    
  • 开机时让chrome打开指定网页

    每天需要登oa系统打卡,经常会忘记,怎么办?弄了个脚本,在开机时,自动弹出oa系统.

    示例

    下面是个bat脚本,放在win8的开机启动目录中

    ::开机启动目录 C:\Users\wangyq\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --pinned-tab-count=1 www.baidu.com
    

    参数

    --pinned-tab-count=x url1 url2 … urlx
    
    • x 是想要开启的pinned tab数目
    • url1,url2,urlx是对应打开的页面网址
  • pymode导致vim保存py文件很慢

    • 问题
      vim安装pymode插件后,保存py文件, 出现vim卡住了,vim底部提示"pymode regenerate auto import cache".

    • 解决
      在.vimrc中添加配置关闭自动构建.

    " 当前目录文件很多时,会导致第一次保存非常慢
    call pymode#default('g:pymode_rope_autoimport', 0)
    

    如果还没有效果,再加上

    let g:pymode_rope = 0
    
  • fedora21防火墙图形界面

    fedora21默认未安装firewall的图形界面,需要自己安装

    sudo yum install firewall-config
    
    • 启动
    sudo firewall-config
    
  • linux命令别名

    • 查看
    alias
    
    • 添加
    alias hello="vi"
    
    • 取消
    unalias hello