具有可变类型参数的多线程函数
import threading, time
class A():
def __init__(self,a):
self.a = a
def run(self):
print(self.a)
if __name__=='__main__':
index = [0]
thread_list = []
for i in range(10):
index[0] = i
thread_list.append(threading.Thread(target=A(index).run))
for thread in thread_list:
thread.start()
time.sleep(0.5)
for thread in thread_list:
thread.join()
这段代码没有显示[0] - [9]序列的正确结果,但所有结果都是[9]。但是,如果将其更改为thread_list.append(threading.Thread(target=A(tuple(index)).run)) 或直接启动而不是在另一个循环中启动它,或者将循环中的索引定义结果为OK。 这里的另外两个版本是否正确:
import threading, time
class A():
def __init__(self,a):
self.a = a
def run(self):
print(self.a)
if __name__=='__main__':
index = [0]
thread_list = []
for i in range(10):
index[0] = i
thread = threading.Thread(target=A(index).run)
thread_list.append(thread_list)
thread.start()
time.sleep(0.5)
for thread in thread_list:
thread.join()
import threading, time
class A():
def __init__(self,a):
self.a = a
def run(self):
print(self.a)
if __name__=='__main__':
thread_list = []
for i in range(10):
index = [0]
index[0] = i
thread_list.append(threading.Thread(target=A(index).run))
for thread in thread_list:
thread.start()
time.sleep(0.5)
for thread in thread_list:
thread.join()
有人可以解释背后的Python如何初始化一个Thread对象的机制,调用start()方法。为什么当一个可变变量进入函数时,它总是最后一个?