python dict字典 items()和iteritems()多线程遍历

匿名 (未验证) 提交于 2019-12-02 22:51:08

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!