Pycharm运行后为什么没有输出

这段代码,在Pycharm 运行后没有输出 ,什么原因?

 

import _thread

def action(i):
    print(i ** 32)

_thread.start_new_thread(action, (2,))

PyCharm 2022.3.1 (Community Edition)

 

这里有两种可能性。

主线程启动了一个线程,但在线程完成执行之前就退出了。因此,标准 I/O 文件不会被刷新,因为它们在默认情况下被缓冲。

或者,如果主线程死亡,所有子线程都在执行中被杀死。

所以无论哪种方式,你都需要确保主线程不会在子线程完成之前终止。

但是当您从 pycharm 运行时,主线程已经不存在,因此,当线程实际完成时,I/O 缓冲区将不会被刷新。

所以为了确保主线程在其他线程执行完之后在退出 保证能打印出内容你需要让其等待子线程运行完毕

import _thread

locks = []


def action(i, lockobject):
    print(i ** 32)
    # 在这里输出完内容后释放锁
    lockobject.release()


def create_thread(value):
    # 创建锁并获取它
    a_lock = _thread.allocate_lock()
    a_lock.acquire()

    # 将其存储在全局锁列表中
    locks.append(a_lock)

    # 将其传递给新创建的线程,该线程可以在完成后释放锁
    _thread.start_new_thread(action, (value, a_lock))


create_thread(2)

# 获取所有锁,即所有线程都释放了锁
all(lock.acquire() for lock in locks)

望采纳!!点击该回答右侧的“采纳”按钮即可采纳!!
我猜测你在使用Python3.x,而你使用的_thread模块是Python2.x中的模块。在Python3.x中,你应该使用threading模块来创建新线程。

你可以使用以下代码来替换你的代码,以在Python3.x中运行:

import threading

def action(i):
    print(i ** 32)

t = threading.Thread(target=action, args=(2,))
t.start()
你也可以使用以下代码来简化线程的创建过程:


import threading

def action(i):
    print(i ** 32)

threading.Thread(target=action, args=(2,)).start()

如果你的代码仍然无法正常工作,请告诉我你遇到的错误消息,我会尽力帮助你解决问题。