Skip to main content
 首页 » 编程设计

Python 线程和锁 : Deadlock

2025年05月04日44fff_TT

<分区>

我正在尝试使用锁在线程中写入和读取数据,但有一个我无法解决的死锁 :s。

事情是这样的。由于对我的问题没有用的原因,我必须启动一个线程,该线程本身将启动其他线程。 所以我有 : 主要的 -> send_gps_data -> stream_session

我在 stream_session 中写入 gpsData,无限循环(每秒输出一个新报告)。 我想在我的主要阅读这些数据。 为了避免数据损坏,我想使用阻塞锁。

代码如下:

def main(): 
    lock = threading.Lock() 
    thread_gps = threading.Thread(None, send_gps_data, args=(gpsData, lock))   
    gps_thread_gps.start() 
 
    # to allow interrupt 
    while(gm.runn): 
        try: 
            time.sleep(0.5) 
            print "!" 
            lock.acquire(): 
            gm.display_gpsdata(gpsData) 
            lock.release() 
            print "!!" 
        except KeyboardInterrupt: 
            gm.runn = 0 
 
def send_gps_data(gpsData, lock): 
    global runn 
    gps_thread = threading.Thread(None, stream_session, args=(gpsData, lock))     
    gps_thread.start() 
    while(runn): 
            time.sleep(1) 
    gps_thread._Thread__stop()   
    sys.exit(0) 
 
def stream_session(gpsData, session, lock): 
    for report in session: 
        if report.get("class") == "TPV": 
            print ":" 
            lock.acquire() 
            fill_gpsdata(gpsData, session, report) 
            lock.release 
            print "::" 

我的问题是我陷入了僵局。这是我用代码得到的输出: ! !! ! !! : :: ! :

然后它就阻塞了。 . . 所以似乎我的锁定释放从未被考虑在内。 . .

我试图将锁创建为全局变量,但它没有改变任何东西。

你能帮我解决这个问题吗?我真的看不出问题