为什么只有 MainThread 到达我的函数?
why only MainThread reaches my function?
import threading
在这个函数中我想为每个线程做我的编码,但是只有主线程进入这个函数 none 在主函数中创建的线程进入这个函数
def enrich():
for i in range(10):
print(threading.current_thread().getName())
def main():
Thread_0 = threading.Thread(target=enrich())
Thread_1 = threading.Thread(target=enrich())
Thread_2 = threading.Thread(target=enrich())
Thread_3 = threading.Thread(target=enrich())
Thread_4 = threading.Thread(target=enrich())
Thread_5 = threading.Thread(target=enrich())
Thread_6 = threading.Thread(target=enrich())
Thread_7 = threading.Thread(target=enrich())
Thread_0.setName('0')
Thread_1.setName('1')
Thread_2.setName('2')
Thread_3.setName('3')
Thread_4.setName('4')
Thread_5.setName('5')
Thread_6.setName('6')
Thread_7.setName('7')
Thread_0.start()
Thread_1.start()
Thread_2.start()
Thread_3.start()
Thread_4.start()
Thread_5.start()
Thread_6.start()
Thread_7.start()
Thread_0.join()
Thread_1.join()
Thread_2.join()
Thread_3.join()
Thread_4.join()
Thread_5.join()
Thread_6.join()
Thread_7.join()
if __name__ == "__main__": main()
在输出中我得到这个:
C:\Users\Danial\AppData\Local\Programs\Python\Python35\python.exe "D:/iaun/Final Project/FileTermsInfo/test.py"
MainThread
MainThread
MainThread
MainThread
MainThread
MainThread
MainThread
MainThread
这是你的问题:
Thread_0 = threading.Thread(target=enrich())
您在这里 调用 您的 enrich()
函数,而不是将对该函数的引用传递给 Thread
构造函数。这自然会发生在主线程上,因为还没有任何其他线程。函数 returns None
所以你实际上在构造函数中指定 target=None
并且你的线程的 none 接收到对要调用的函数的引用。结果,他们中的 none 无所不用其极。所有对 enrich()
的调用都发生在创建一个线程之前,并且它们是顺序发生的,而不是并行发生的。
传递函数,而不是结果:
Thread_0 = threading.Thread(target=enrich)
你的其他主题也是如此。
此外,天哪,为线程使用列表而不是单个变量。没有理由让所有代码都完成您可以在几行代码中完成的工作。
threads = [threading.Thread(target=enrich, name=str(x)) for x in range(8)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
import threading
在这个函数中我想为每个线程做我的编码,但是只有主线程进入这个函数 none 在主函数中创建的线程进入这个函数
def enrich():
for i in range(10):
print(threading.current_thread().getName())
def main():
Thread_0 = threading.Thread(target=enrich())
Thread_1 = threading.Thread(target=enrich())
Thread_2 = threading.Thread(target=enrich())
Thread_3 = threading.Thread(target=enrich())
Thread_4 = threading.Thread(target=enrich())
Thread_5 = threading.Thread(target=enrich())
Thread_6 = threading.Thread(target=enrich())
Thread_7 = threading.Thread(target=enrich())
Thread_0.setName('0')
Thread_1.setName('1')
Thread_2.setName('2')
Thread_3.setName('3')
Thread_4.setName('4')
Thread_5.setName('5')
Thread_6.setName('6')
Thread_7.setName('7')
Thread_0.start()
Thread_1.start()
Thread_2.start()
Thread_3.start()
Thread_4.start()
Thread_5.start()
Thread_6.start()
Thread_7.start()
Thread_0.join()
Thread_1.join()
Thread_2.join()
Thread_3.join()
Thread_4.join()
Thread_5.join()
Thread_6.join()
Thread_7.join()
if __name__ == "__main__": main()
在输出中我得到这个:
C:\Users\Danial\AppData\Local\Programs\Python\Python35\python.exe "D:/iaun/Final Project/FileTermsInfo/test.py"
MainThread
MainThread
MainThread
MainThread
MainThread
MainThread
MainThread
MainThread
这是你的问题:
Thread_0 = threading.Thread(target=enrich())
您在这里 调用 您的 enrich()
函数,而不是将对该函数的引用传递给 Thread
构造函数。这自然会发生在主线程上,因为还没有任何其他线程。函数 returns None
所以你实际上在构造函数中指定 target=None
并且你的线程的 none 接收到对要调用的函数的引用。结果,他们中的 none 无所不用其极。所有对 enrich()
的调用都发生在创建一个线程之前,并且它们是顺序发生的,而不是并行发生的。
传递函数,而不是结果:
Thread_0 = threading.Thread(target=enrich)
你的其他主题也是如此。
此外,天哪,为线程使用列表而不是单个变量。没有理由让所有代码都完成您可以在几行代码中完成的工作。
threads = [threading.Thread(target=enrich, name=str(x)) for x in range(8)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()