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()进行遍历时,会抛出下述异常: