python锁方法注释

paw*_*que 13 python annotations locking

是否有一个python锁注释,它与python方法的效果与java方法的"synchronized"关键字相同?

mou*_*uad 15

我可以假设,没有内置的功能在Python存在,但你可以理解它是如何在Java中的工作实现它链接:

创建的每个Java对象(包括每个加载的类)都有一个关联的锁或监视器.将代码放在synchronized块中会使编译器附加指令以在执行代码之前获取指定对象的锁定,然后释放它(因为代码正常或异常完成).在获取锁定并释放它之间,线程被称为"拥有"锁.在线程A希望获取锁定时,如果线程B已经拥有它,则线程A必须等待线程B释放它.

所以也许这样的东西可以工作:

java中的synchronized语句:

public class Java {
    static private int count = 0;

    public void increment() {
       synchronized (this) {
          count++;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

成了:

import threading

class Java:
   cout = 0
   lock = threading.RLock()

   def increment():
       with Java.lock:
           Java.cout += 1
Run Code Online (Sandbox Code Playgroud)

和Java中的synchronized方法:

public class Java {
    static private int count = 0;

    public synchronized void increment() {
        count ++;
    }
}
Run Code Online (Sandbox Code Playgroud)

成为:

import threading

def synchronized(method):
    """ Work with instance method only !!! """

    def new_method(self, *arg, **kws):
        with self.lock:
            return method(self, *arg, **kws)


    return new_method

class Java:
    count = 0
    lock = threading.RLock()

    @synchronized
    def incremenet(self):
        Java.count += 1
Run Code Online (Sandbox Code Playgroud)

显式优于隐式.

注意:我在Java方面的知识非常有限,这是我关于这个Java功能的第一次演讲,所以也许我想念一些东西(或者我可能会错过这里的所有观点:)),希望这个答案可以帮助别人.

注意:我创建的锁是一个类变量,因此线程同步发生在类级别,如果我们想在实例级别(仅)进行同步,我认为java是如何做的,上面的代码必须改变.

  • 您还可以使用`with lock:`而不是获取和释放方法. (3认同)