2017年3月24日

利用epoll实现异步IO

摘要: 之前异步IO一直没搞明白,大致的理解就是在一个大的循环中,有两部分:第一部分是监听事件;第二部分是处理事件(通过添加回调函数的方式)。就拿网络通信来说,可以先通过调用 select 模块中的 select 监听各个 socket 。当 socket 有事件到来时,针对相应的事件做出处理,就这么一直循 阅读全文

posted @ 2017-03-24 20:39 科幻vs现实 阅读(5631) 评论(3) 推荐(0) 编辑

2017年3月23日

利用Django实现RESTful API(一)

摘要: RESTful API现在很流行,这里是它的介绍 理解RESTful架构和 RESTful API设计指南.按照Django的常规方法当然也可以实现REST,但有一种更快捷、强大的方法,那就是 Django REST framework.它是python的一个模块,通过在Django里面配置就可以把 阅读全文

posted @ 2017-03-23 17:46 科幻vs现实 阅读(65796) 评论(8) 推荐(6) 编辑

2017年3月14日

利用python实现TCP和UDP服务器

摘要: 利用python的socket模块可以实现基本的网络编程,并且只限于一对一的连接。当然,也可以在其基础上实现一个网络服务器,但由于太底层这种做法不被推荐。其实如果要实现一个网络服务器很简单,调用python的内置模块socketserver就够了。 server类 socketserver模块下面有 阅读全文

posted @ 2017-03-14 14:42 科幻vs现实 阅读(10752) 评论(0) 推荐(0) 编辑

2017年3月12日

开启线程池和进程池

摘要: 线程与进程的应用场合很多,主要处理并发与多任务。然而,当开启的线程与进程过多时,系统的开销过多会造成性能低下甚至崩溃。这时,希望出现一种方法能规定只能执行指定数量线程与进程的策略。特别是针对不知道要开启多少线程或进程,而有可能出现线程或进程过多的情况。于是,线程池与进程池出现了。python3以后增 阅读全文

posted @ 2017-03-12 18:25 科幻vs现实 阅读(1794) 评论(0) 推荐(0) 编辑

单例模式

摘要: 使用new方法实现单例模式 每个实例的创建是通过__new__方法,所以如果要实现一个类只能有一个实例就得重写__new__函数。 执行: 输出为: 执行: 输出为: 执行: 输出: 使用共享属性实现单例模式 与上一种方法不同的是,此种方法当执行__new__方法后,每次生成一个新的实例。只不过每个 阅读全文

posted @ 2017-03-12 18:24 科幻vs现实 阅读(253) 评论(0) 推荐(0) 编辑

并发编程之线程与锁

摘要: 线程是操作系统调度的最小单位,随着多核处理器的流行多线程编程成为能有效发挥cpu潜能的利器(python除外)。线程之间的内存是共享,所以创建一个线程所需要的开销比创建一个进程的开销要小得多。抛开硬件层面,多线程也给我们提供同时执行多个任务的手段(并发编程),使得我们能有另一种编程思维。python 阅读全文

posted @ 2017-03-12 18:24 科幻vs现实 阅读(614) 评论(0) 推荐(0) 编辑

伪私有属性的意义

摘要: 抛开语言层面,在通常的面向对象编程中(典型的C++),类都有私有属性。这是为了封装自己的属性,并且保证不会被外界调用修改而只能自己的方法调用修改。由于动态语言的特性,python中不存在严格封装特性,可以在外界随意调用类中任何属性和方法。一般我们想在类中申明一些不想被外界调用的私有属性时,通常约定俗 阅读全文

posted @ 2017-03-12 18:23 科幻vs现实 阅读(349) 评论(0) 推荐(0) 编辑

为什么要使用nonlocal

摘要: Python3中加入了新的关键字nonlocal,当在一个嵌套的函数中对变量申明为nonlocal时,就明确表示这个变量是外部函数中定义的变量。也许会有这么一个问题:按照python的LEGB原则,在函数本地作用域找不到变量的情况下,解释器会自动在外层函数寻找,nonlocal关键字岂不是显得多余? 阅读全文

posted @ 2017-03-12 18:22 科幻vs现实 阅读(7981) 评论(0) 推荐(3) 编辑

导航