Python-将全局变量锁定在非线程中

问题描述

我具有要从线程和主程序访问的全局变量

import thread
var = 0
def abc(lock):
    lock.acquire()
    var = 1
    lock.release()
lock = thread.allocate_lock()
thread.start_new_thread(abc,(lock))
while True:
    #should I put lock.acquire() here?
    var = 2
    #and should I put lock.realease() here?

我会想象这样的事情。至少我只用线程来做到这一点(顺便说一句-将锁传递到这样的线程中可以吗?我对所有线程都这样做了)。如果不可能的话,唯一的方法就是也将主代码放入线程中?

解决方法

由于存在GIL(全局解释锁),因此您可以使用全局变量在线程之间传递数据。由于线程共享相同的内存,并且不能死锁应用程序,因此可以安全地使用全局变量,也可以在首次创建线程时将变量作为参数传递。