在线程世界里,都是线程共享进程中的变量,修改后相互影响,为了能使线程能够有自己的变量,在python中,使用了threadlocal变量。在threadlocal变量中,线程修改的都是属于自己的变量,不会影响到其他的线程
import threading
local = threading.local()
def process_st():
time.sleep(1)
name = local.name
print("local.name = {} ,thread.name={}".format(name,threading.current_thread().name))
def pro(name):
local.name = name;
process_st()
if __name__=="__main__":
t1 = threading.Thread(target=pro,args=("t1",),name="thread-t1")
t2 = threading.Thread(target=pro,args=("t2",),name="thread-t2")
t1.start()
t2.start()
t1.join()
t2.join()
在上面中,local
是一个threadlocal变量,我们可以发现,作为一个全局变量,两个线程修改后都不会相互影响。
import threading
import time
class A:
def __init__(self,name="orv"):
self.name = name
pass
local = A();
def process_st():
time.sleep(1)
name = local.name
print("local.name = {} ,thread.name={}".format(name,threading.current_thread().name))
def pro(name):
local.name = name;
process_st()
if __name__=="__main__":
t1 = threading.Thread(target=pro,args=("t1",),name="thread-t1")
t2 = threading.Thread(target=pro,args=("t2",),name="thread-t2")
t1.start()
t2.start()
t1.join()
t2.join()
这个可以发现线程2修改后会影响线程1