python threading & lambda
2011-05-07 22:38
471 查看
多线程时操作时需要注意到传入lambda表达式的变量是在运行时动态取值的,所以它很可能跟你在定义lambda时的值不一样。举个例子
而实际上我们期望的是123456789没有重复和缺失,而且这段代码可能每次跑出来的结果还不一样,这就是因为主线程一直在更改x,func线程便可能取到已经更新过的值。
有2个方式可以解决这个问题,
1. 在lambda表达式传入一个定义阶段的变量:
2. 不用lambda,使用args参数:
>>> def func(x): print x >>> for x in range(1,10): threading.Thread(target=lambda:func(x)).start() 223456789
而实际上我们期望的是123456789没有重复和缺失,而且这段代码可能每次跑出来的结果还不一样,这就是因为主线程一直在更改x,func线程便可能取到已经更新过的值。
有2个方式可以解决这个问题,
1. 在lambda表达式传入一个定义阶段的变量:
>>> for x in range(1,10): threading.Thread(target=lambda y=x:func(y)).start() 123456789
2. 不用lambda,使用args参数:
>>> for x in range(1,10): threading.Thread(target=func, args=(x,)).start() 123456789
相关文章推荐
- python 2-5 如何快速找到多个字典中的(key) viewkeys(集合)/reduce(lambda a,b:a&b,map(d.keys(),[d1,d2])
- 学习笔记8-python-lambda&map
- 18.Python - zip & lambda & map
- python threading/Event & Timer(3)
- python list.remove(),del()和filter & lambda
- yum 故障 File "/usr/lib64/python2.6/threading.py", line 474, in start
- python threading/lock&Rlock&condition 锁
- python -> lambda与def的差别
- 【Python笔记】Python的几个高级语法概念浅析:lambda表达式 && 闭包 && 装饰器
- python -> lambda与def的区别
- 【原创】python lambda表达式
- 【原创】Python Threading.Ti…
- python list.remove(),del()和filter & lambda
- python中的arg & *args & **kwargs使用方法
- Python抓取网页&批量下载文件方法初探(正则表达式+BeautifulSoup) (转)
- 【LeetCode】【Python题解】Single Number & Maximum Depth of Binary Tree
- python多线程(2)--thread和threading模块的使用
- python之匿名函数lambda
- python文件名不要跟模块名相同,报错AttributeError: 'module' object has no attribute 'Differ'
- [python&php 网络编程]socket的错误捕捉