为什么只有主线程达到我的功能?

2024-06-01 06:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

import threading

在这个函数中,我想为每个线程编写代码,但是只有主线程进入这个函数,在主函数中创建的线程没有一个进入这个函数

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

Tags: 函数代码importtargetmaindef线程thread
1条回答
网友
1楼 · 发布于 2024-06-01 06:20:11

这就是你的问题:

Thread_0 = threading.Thread(target=enrich())

这里您正在调用您的enrich()函数,而不是将对该函数的引用传递给Thread构造函数。当然,这发生在主线程上,因为还没有任何其他线程。函数返回None,因此您实际上在构造函数中指定了target=None,并且没有线程接收到对要调用的函数的引用。结果,他们什么也没做。对enrich()的所有调用都是在创建单个线程之前发生的,它们是顺序发生的,而不是并行发生的

传递函数,而不是其结果:

Thread_0 = threading.Thread(target=enrich)

你的其他线程也是如此

另外,sheesh,对线程使用列表而不是单个变量。没有理由让所有这些代码去做你在几行代码中可以做的事情

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()

相关问题 更多 >