易截截图软件、单文件、免安装、纯绿色、仅160KB

Python 线程同步

多个执行线程经常要共享数据,如果仅仅读取共享数据还好,但是如果多个线程要修改共享数据的话就可能出现无法预料的结果。
    假如两个线程对象t1
和t2
都要对数值num=0
进行增1运算,那么t1
和t2
都各对num
修改10
次的话,那么num
最终的结果应该为20
。但是如果当t1
取得num
的值时(假如此时num
为0
),系统把t1
调度为“sleeping
”状态,而此时t2
转换为“running
”状态,此时t2
获得的num
的值也为0
,然后他把num+1
的值1
赋给num
。系统又把t2
转化为“sleeping
”状态,t1
为“running
”状态,由于t1
已经得到num
值为0
,所以他也把num+1
的值赋给了num
为1
。本来是2
次增1
运行,结果却是num
只增了1
次。类似这样的情况在多线程同时执行的时候是有可能发生的。所以为了防止这类情况的出现就要使用线程同步机制。
    最简单的同步机制就是“锁”
    锁对象用threading.RLock
类创建
    mylock = threading.RLock()
    如何使用锁来同步线程呢?线程可以使用锁的acquire()
(获得)方法,这样锁就进入“locked
”状态。每次只有一个线程可以获得锁。如果当另一个线程试图获得这个锁的时候,就会被系统变为“blocked
”状态,直到那个拥有锁的线程调用锁的release()
(释放)方法,这样锁就会进入“unlocked
”状态。“blocked
”状态的线程就会收到一个通知,并有权利获得锁。如果多个线程处于“blocked
”状态,所有线程都会先解除“blocked
”状态,然后系统选择一个线程来获得锁,其他的线程继续沉默(“blocked
”)。
import threading
mylock = threading.RLock()
class mythread(threading.Thread)
    ...
    def run(self ...):
        ...     #此处 不可以
放置修改共享数据的代码
        mylock.acquire()
        ...     #此处 可以
放置修改共享数据的代码
        mylock.release()
   


相关文档:

Python解决文件编码问题

    前几天,小许给我一份JavaQQ的源代码,用vim打开一看,发现里面的中文都是乱码。不用说,又是可恶的编码问题,在window下的文本文件通常使用GBK或GB18030编码,而在Linux下utf-8编码则大行其道。打开——另存为肯定不是上策,上网找编码批量转换工具也不是咱勤劳勇敢的程序员的作风。自已动手 ......

Python的内存泄漏及gc模块的使用

Python的内存泄漏及gc模块的使用
                  -- 6.11日错误修正版
            
Horin|贺勤
        Email: horin153@msn.com ......

python字符串使用总结



来源:
作者:
灵剑
1.python 字符串通常有单引号('...')、双引号(...)、三引号(...)或('''...''')包围,三引号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,

1.python
字符串通常有单引号('...')、双引号("...")、三引号("""... ......

自动化测试中Python与C/C++的混合使用


背景
项目的
自动化测试中已经使用了基于Python
脚本的框架,自动化过程中最关键的问题就是如何实现桩模块。运用
Python
强大的功能,实现任何桩模块都是可能的,但是是否必须完全使用
Python
实现模块逻辑,成本是一个决定性因素。在桩模块逻辑简单的情况下,使用
Python
模拟模块逻辑不但使自动化测试的结构清 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号