周记 2017 5.1 - 5.7

96
小程有话说
2017.05.05 16:07* 字数 102

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 字符串直接实例化成类。
周记
Web note ad 1