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 字符串直接实例化成类。