我正在尝试在我拥有的一段python代码中锁定多个变量,每个变量一个锁。使用semaphore.h中提供的sem_wait,sem_post,sem_init例程,可以很容易地在C中锁定变量。 python中的等价物是什么?
附录:
目前使用的代码结构相当于
lock1 = threading.lock()
lock2 = threading.lock()
Thread 1
lock1.acquire()
var1 = func1()
lock1.release()
lock2.acquire()
var2 = func2()
lock2.release()
Thread 2
lock1.acquire()
var1 = func1()
lock1.release()
lock2.acquire()
var2 = func2()
lock2.release()
答案 0 :(得分:2)
查看标准库中的“threading”模块。它提供信号量,锁和其他并行处理细节。 https://docs.python.org/3.4/library/threading.html
答案 1 :(得分:-1)
在大多数python实现中,你有一个全局解释器锁,它一次阻止多个线程执行python代码。
此外,在大多数实现中,GIL仅在执行了一定数量的完整python字节码操作后才会释放,这意味着,与C不同,您没有负载增量存储操作可以并行运行的情况。做错了 - 通常,对变量的更改是原子的。
因此,您通常不需要保护每个变量,并且您会发现很多代码实际上“正常”,具体取决于您使用python线程的方式。
话虽如此,如果你需要比GIL隐含提供的更严格的粒度控制,那么线程模块(特别是条件变量)是可行的。