相关疑难解决方法(0)

Lock和RLock有什么区别

来自文档:

threading.RLock() - 一个返回新的可重入锁对象的工厂函数.必须由获取它的线程释放可重入锁.一旦线程获得了可重入锁,同一个线程可以再次获取它而不会阻塞; 线程必须在每次获取它时释放一次.

我不知道为什么我们需要这个?Rlock和之间有什么区别Lock

python multithreading locking reentrancy

54
推荐指数
2
解决办法
2万
查看次数

是否有可能在Python中继承Lock()对象?如果没有,其他调试死锁的方法?

所以,我有一个多线程的python程序,目前正遭遇死锁.我打算通过子类化threading.Lock对象来记录锁获取:

import traceback
class DebugLock(threading.Lock):
    def acquire(self):
        print >>sys.stderr, "acquired", self
        #traceback.print_tb
        threading.Lock.acquire(self)  
    def release(self):
        print >>sys.stderr, "released", self
        #traceback.print_tb
        threading.Lock.release(self)  
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该程序时,我收到以下错误:

    class DebugLock(threading.Lock):
TypeError: Error when calling the metaclass bases
    cannot create 'builtin_function_or_method' instances  
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是双重的:

  1. 是否可以将Lock对象子类化为我正在做的事情?

  2. 如果没有,在python中调试死锁的最佳方法是什么?

注意:我没有编写任何Python扩展.有一个类似的问题:如何使用python调试死锁? 但是,它涉及编译C++代码和使用GDB,因为我的代码是纯Python,所以我无法做到.

python oop multithreading deadlock thread-safety

7
推荐指数
2
解决办法
2168
查看次数