我目前正在練習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()?