Python学习

Posted alicebat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习相关的知识,希望对你有一定的参考价值。

Python——互斥锁

1.进程之间的数据不能共享,但是共享同一套文件系统,所以访问同一个文件,或者同一个打印终端,是没有问题的,而共享带来的是竞争竞争带来是错乱

2.如何控制,就是加锁处理,而互斥锁就是互相排斥,假设把多个进程比喻成多个人,互斥锁的工作原理是多个人都要去争抢同一个资源:比如抢一个房间,谁先抢到这个资源就暂时先占为己有然后上个锁,然后在他占用的时间段内别人是要等他用完

hreading模块中定义了Lock类,可以方便的处理锁定:

1.创建锁
mutex = threading.Lock()

2.锁定
mutex.acquire([timeout])

3.释放
mutex.release()

其中,锁定方法acquire可以有一个超时时间的可选参数timeout。如果设定了timeout,则在超时后通过返回值可以判断是否得到了锁,从而可以进行一些其他的处理。
使用互斥锁实现上面的例子的代码如下:

from multiprocessing import Process,Lock
import time,random
#互斥锁:必须是lock.acquire()一次,然后lock.release()释放一次,才能继续lock.acquire()
#互斥锁和join区别
#大前提:二者的原理都是一样的,都是将并发变成串行,从而保证有序
#区别:join是按照认为指定的顺序执行,而互斥锁是所有的进程平等的竞争,谁先抢到谁执行
mutex=Lock()

#两个线程都在抢着对这个锁进行上锁,如果有一方成功上锁,那么导致另外一方会堵塞(一直等待),到这个锁被解开为之
thnum=0
class MyThread(threading.Thread):
    def run(self):
        mutex.acquire()
        for i in range(10000):
            global thnum
            thnum+=1    
        print(thnum)
        mutex.release()
 
def test():
    global thnum
    mutex.acquire()  #等待可以上锁,通知而不是轮训,没有占用CPU
    for i in range(10000):
        thnum+=1
    print(thnum)
    mutex.release()#解锁

以上是关于Python学习的主要内容,如果未能解决你的问题,请参考以下文章

Python学习总结

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

python 学习python语法的片段

python小白学习记录 多线程爬取ts片段

python ipython:机器学习片段

30 段 Python 实用代码