我目前正在练习python多线程模块,并且我编写了一些如下代码,但它并不像我期望的那样工作。python Rlock如何工作以及Rlock的所有者是什么?
import threading
import thread
import random
import time
lock = threading.RLock()
def func(lock):
print("In Thread " + threading.currentThread().getName())
lock.acquire()
time.sleep(random.random()*10)
lock.release()
print("Out Thread " + threading.currentThread().getName())
def start():
lock.acquire()
for i in range(5):
thread.start_new(func, (lock,))
lock.release()
# for i in range(5):
# thread.start_new(func, (lock,))
start()
print("test")
time.sleep(1)
lock.acquire()
print("main ends")
lock.release()
在我看来,是否有time.sleep(1)在主线程不算多的新线程的运行,因为锁是全球性的,属于主线程中,lock.acquire ()操作总能正常工作,所以主线程不应该等待这些新线程继续。根据thread.start_new()的属性,当主线程结束时,所有新线程也将停止。但是,当我注释掉time.sleep()行时,程序按照我的预期行事,但是当我添加此行时,主线程始终等待新线程完成。
这使我很困惑,希望有人向我解释Rlock()的功能,以及它在哪个线程中属于我在主线程中创建它时传递给子新线程和调用lock.acquire()?