items()和iteritems()区别:
一、两个函数的作用
字典的items方法作用:是可以将字典中的所有项,以列表方式返回。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。
字典的iteritems方法作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。
所以iteritems遍历的速度比items方法快
python dict字典循环遍历性能 iteritems比items快
二、使用items()和iteritems()遍历字典,并使用多线程进行读写,用下面的代码进行测试
#!/usr/bin/env python # -*- coding: utf-8 -*- import traceback import threading from time import sleep,ctime _data = dict() def loop(nloop,data): res = dict() for i in xrange(nloop): try: for k, v in data.iteritems(): # for k, v in data.items(): a = k b = v res[a] = b except Exception as e: print("read occur exception:{} i:{} {} {}".format( traceback.format_exc(), i, k, v)) continue def loop2(nloop,data): for i in xrange(nloop): try: for x in xrange(i * 5): data[x] = x * i except Exception as e: print("write occur exception:{} i:{} x:{}".format( traceback.format_exc(), i, x)) continue def main(): print('main begin: ',ctime()) threads=[] for i in xrange(1): t2=threading.Thread(target=loop2,args=(5000, _data)) threads.append(t2) t1=threading.Thread(target=loop,args=(10000, _data)) threads.append(t1) for i in xrange(len(threads)): threads[i].start() #循环 开始线程 for i in xrange(len(threads)): threads[i].join() #循环 join()方法可以让主线程等待所有的线程都执行完毕。 print('main end ',ctime()) if __name__=='__main__': main()
当读线程使用items()进行遍历,没有抛出异常,
但使用iteritems()进行遍历时,会抛出下述异常:
文章来源: https://blog.csdn.net/runnerchen1/article/details/90813937