【发布时间】:2015-02-24 06:50:40
【问题描述】:
我目前正在练习python多线程模块,我写了一些代码如下,但它没有像我预期的那样工作。
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()?
【问题讨论】:
标签: python multithreading