python 中多线程的并发跟其他语言一样,需要考虑多线程并发访问去全局变量所带来的问题,python的local类解决了这个问题,通过它让每个线程内部有一个相对独立的local保存数据,某一个线程修改了数据,不影响其他线程中保存的数据。
1 from threading import Thread 2 import threading 3 import time 4 local_value=threading.local() 5 local_value.x=‘en‘ 6 class threadtest(Thread): 7 8 def __init__(self,num): 9 Thread.__init__(self) 10 self.num=num 11 12 def run(self): 13 local_value.x=self.getName() 14 for i in range(self.num): 15 time.sleep(1) 16 print(local_value) 17 18 19 threadtest(3).start() 20 threadtest(2).start()
执行结果是:
Thread-1 Thread-2 Thread-1 Thread-2 Thread-1 [Finished in 3.2s]
这表明,虽然两个线程公用一个local_value.x但是确实相互独立的变量。
另外,当
local_value.x=self.getName()放在__init__()中时,运行会报错,说‘_thread._local‘ object has no attribute ‘x‘,还不知道什么问题,但是还是先去吃饭吧。
时间: 2024-10-28 23:11:12