python线程锁的用法,如何使用线程锁来提高多线程并发效率

1,如何使用线程锁来提高多线程并发效率多线程并发和多线程管理,比如说一条线程专门负责读取数据,一条线程专门负责输出数据, 还有一条主线程专门用来显示界面ui, 更新ui等这些就是多线程了.Windows程序基于消息循环的 。如果要做多件事 , 你就得排队,这叫消息列队 。单线程程序执行效率相对较低 。多线程相当于多个消息循环 。可以把多件事情放到不同的循环中去完成 。效率高 。
2 , 线程同步中线程锁如何使用synchronized锁住对象!看哪个线程能先选取得对象的锁,就能先买到这股票m1方法上加了synchronized,也就是同步了当前的tt这个实例 。当m1方法在休眠时,其他线程可以访问m2方法,但不能访问m1方法 。如果tt1这个类中有其他的加了 synchronized的方法,此时 , 别的线程也不能访问这个方法 。所以synchronized 锁的是当前实例中所有加了 synchronized 的方法 。
3,python 什么时候使用线程锁普通的一个多线程小例子 。我一笔带过地讲一讲 , 我创建了一个继承Thread类的子类MyThread,作为我们的线程启动类 。按照规定 , 重写Thread的run方法,我们的线程启动起来后会自动调用该方法 。于是我首先创建了10个线程,并将其加入列表中 。再使用一个for循环,开启每个线程 。在使用一个for循环,调用join方法等待所有线程结束才退出主线程 。检测一个文件是否被一个进程打开是和语言没有关系的, 和操作系统有关. linux 上可以通过遍历所有的进程, 看每一个进程有没有打开你需要知道的文件. 这可以通过 lsof 得到.【python线程锁的用法,如何使用线程锁来提高多线程并发效率】
4,Python中threading的join和setDaemon的区别及用法python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉 。而在python中,主线程结束后,会默认等待子线程结束后 , 主线程才退出 。python对于thread的管理中有两个函数:join和setDaemonjoin:如在一个线程B中调用threada.join(),则threada结束后 , 线程B才会接着threada.join()往后运行 。setDaemon:主线程A启动了子线程B,调用b.setDaemaon(True) , 则主线程结束时,会把子线程B也杀死 , 与C/C++中得默认效果是一样的 。在这里给出一个例子:#! /usr/bin/env pythonimport threadingimport timeclass myThread(threading.Thread):def __init__(self, threadname):threading.Thread.__init__(self, name=threadname)self.st = 2def run(self):time.sleep(self.st)print self.getName()def setSt(self, t):self.st = t def fun1():t1.start()print "fun1 done"def fun2():t2.start()print "fun2 done"t1=myThread("t1")t2=myThread("t2")t2.setSt(10);# t2.setDaemon(True)fun1()fun2()print "now u will see me"5 , python有了GIL为什么还有线程锁GIL是限制同一个进程中只有一个线程进入Python解释器 。。。。。而线程锁是由于在线程进行数据操作时保证数据操作的安全性(同一个进程中线程之间可以共用信息,如果同时对数据进行操作,则会出现公共数据错误)其实线程锁完全可以替代GIL,但是Python的后续功能模块都是加在GIL基础上的 , 所以无法更改或去掉GIL,这就是Python语言最大的bug…只能用多进程或协程改善,或者直接用其他语言写这部分你自己想想看这个情景线程ab同时操作listlist的[0]初始值为0线程a 操作100次list[0]+=1线程b 操作100次list[0]+=1在线程a 对于 list[0]进行操作时list[0]为0, 还没等线程a完成加一操作, 就被切换到线程b了在线程b 眼里,list[0]还是为0, 于是执行加一操作.再切换回线程a, 继续未完成的加一操作你发现了没!!! 线程ab各对list[0]进行了加一,预期结果是2 但结果还是1python的list不是完全线程安全的.所以加个线程锁就完了.话说为什么, 有了线程锁还需要gil呢?因为, 有了gil, 提供并发就变得很容易. 解释器只要计算每个线程的运行时间就好了时间一到, 将这个线程冻结, 内存管理很简单.等等, 你还是没解释, 如果我已经给线程上了锁, 为什么还是要被gil限制?一向符合人类直觉的python, 有个很反直觉的机制.py的变量a其实不是c系编译语言的变量.python维护着一个字典, 储存着a和对应数值的指针.用某黑python的大牛的话说, python企图用字典装下世界..如果变成真多线程对于这个字典的维护将会很复杂.多个线程真正同时操作一个字典, python引以为傲的字典性能, 估计就没那么强了.就是说, python字典的性能强大,是建立在线程不安全的基础上.而字典在python中的位置又是如此重要, 一个缓慢的字典, 会严重拖慢python的解释速度.多线程操作多个独立字典. 那样还是要同步.那为什么不采用多进程呢? 这就是社区主流的看法.虽然理论上线程成本更低, 但是那样代码就改成面目全非了..

    推荐阅读