tul*_*84z -3 python multithreading python-multithreading python-2.7
我想锁定该方法的一部分(“等待获取锁定”之后的那部分应该仅在第一个线程释放锁定之后才能运行)。发生的情况是两个线程都独立运行,而与lock.acquire()无关。
我不知道为什么这不起作用。stackoverflow中的示例与此类似,但并不完全相同。请看一下我为什么需要这样做:我没有显式的共享资源,我只想防止2个python线程运行相同的代码,因为在我正在开发的系统中,它们可能会将系统置于不稳定的状态。
import threading, time
def test(name):
lock = threading.Lock()
print(name + " - Starting thread")
print(name + " - Waiting to acquire lock")
lock.acquire(True)
try:
print(name + " - Lock acquired!")
for i in range(10):
print(name + " - " + str(i))
print("")
time.sleep(1)
finally:
lock.release()
print(name + " - Lock released")
def main():
t1 = threading.Thread(target=test, args=["#1_Thread"])
t2 = threading.Thread(target=test, args=["#2_Thread"])
t1.start()
time.sleep(3)
t2.start()
main()
Run Code Online (Sandbox Code Playgroud)
每个线程都创建并锁定自己的独立锁:
def test(name):
lock = threading.Lock()
...
Run Code Online (Sandbox Code Playgroud)
那不会提供相互排斥。两个线程可以同时锁定不同的锁而不会发生冲突。锁仅在两个线程试图锁定同一锁时才执行任何操作。
创建一个锁并将其提供给两个线程。当您使用它时,with声明通常是确保清除的最佳方法,而不是finally块。当执行进入时将锁定该锁,with而在执行离开时将其解锁:
import threading, time
def test(name, lock):
print(name + " - Starting thread")
print(name + " - Waiting to acquire lock")
with lock:
print(name + " - Lock acquired!")
for i in range(10):
print(name + " - " + str(i))
print("")
time.sleep(1)
print(name + " - Lock released")
def main():
lock = threading.Lock()
t1 = threading.Thread(target=test, args=["#1_Thread", lock])
t2 = threading.Thread(target=test, args=["#2_Thread", lock])
t1.start()
time.sleep(3)
t2.start()
main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |