周记 2017 5.1 - 5.7

Python协程

参考:廖雪峰Python教程

在上周周记中提到了Python中使用线程提升执行效率问题。

单线程操作(Python3.5):

import time
import datetime


def task1(n):
    print('task1 begin:', n)
    time.sleep(1)  # 等待1秒 假设这是个I/O操作
    print('task1 end.')


if __name__ == '__main__':  # 总共耗时10秒
    for i in range(10):
        task1(i)

多线程操作:

import time
import datetime
from multiprocessing.dummy import Pool as ThreadPool


def task1(n):
    print('task1 begin:', n)
    time.sleep(1)
    print('task1 end.')


if __name__ == '__main__':
    pool = ThreadPool()
    tasks = [i for i in range(100)]
    before = datetime.datetime.now()
    pool.map(task1, tasks)
    # 执行100次耗时 00:00:28.120513
    print(datetime.datetime.now() - before)  
    pool.close()
    pool.join()

协程操作:

import datetime
import threading
import asyncio

@asyncio.coroutine
def task1(n):
    print('task1 begin:', n)
    yield from asyncio.sleep(1)
    print('task1 end.')


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    tasks = [task1(i) for i in range(100)]
    before = datetime.datetime.now()
    loop.run_until_complete(asyncio.wait(tasks))
    # 执行100次耗时0:00:01.044293
    print(datetime.datetime.now() - before)
    loop.close()

相比而言,协程拥有极高的执行效率,省去了线程之间切换的代价,从而提升了执行速度。

好用的Intellij IDEA插件

CheckStyle-IDEA:代码规范检查(可自定义规范,比如每行代码不能超过多少列,如果项目组统一代码规范是个很好的工具)。
FindBugs-IDEA:潜在Bug检查,能提前找出忽略的细节。
Statistic:代码统计,统计js、java代码行等相关数据。
CodeGlance:类似 Sublime Text2 在右侧产生代码缩略图。
GsonFormat:把 JSON 字符串直接实例化成类。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容