这段代码,在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()
如果你的代码仍然无法正常工作,请告诉我你遇到的错误消息,我会尽力帮助你解决问题。