local_school.student和某线程的接口在哪里?
Topic sourcethreading.Thread()先把args传到target指定的函数里面,例子中是process_thread(),这个函数里面将args赋值给local_school.student,然后调用函数里面的process_student(),因为local_school是一个全局对象,所以在process_student()可以针对这个线程进行赋值,也就是最终的std=local_school.student=name=args
Thread(group=None, target=None, name=None, args=(), kwargs={})
group: 线程组,目前还没有实现,库引用中提示必须是None; target: 要执行的方法; name: 线程名; args/kwargs: 要传入方法的参数。
廖老师不是说了?内部会处理,至于怎么处理,我觉得现在不要搞得这么细吧
全局变量
local_school
就是一个ThreadLocal
对象,每个Threa
d对它都可以读写student
属性,但互不影响。你可以把local_school
看成全局变量,但每个属性如local_school.student
都是线程的局部变量,可以任意读写而互不干扰,也不用管理锁的问题,ThreadLocal
内部会处理。
thread
的name
那个你不用管,小东西,和threadLocal
无关;
你的所谓关联的接口,可以看这个java中的threadLocal
里面有javathreadlocal
源码分析,应该Python的原理也是一样的。
但其实最核心的原理就是,thread
本身持有了一个属性来管理,你想想每一个实例的属性肯定都是互不干扰的,所以每一个thread
(作为实例)的threadLocal
也是独立的。
- 1
梦炸
上面代码中local_school是一个ThreadLocal全局对象,student和teacher等都可以是他的属性,属性对应的是一个字典,字典里存的是每个线程对应的student值,这样就可以在同个线程的不同函数里调用相同的值。我理解的对吗?
问题来了:对于这个进程t1 = threading.Thread(target= process_thread, args=('Alice',), name='Thread-A')这句是把“Alice”传到函数local_school.student这个对象的属性的值里。想问线程的名字是怎么穿进去的,是local_school这个对象是用threading.current_thread()方法自动获得当前线程名称,对吗?