s2fm2 2023-01-01 11:32 采纳率: 100%
浏览 64
已结题

Pycharm运行后为什么没有输出

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

 

import _thread

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

_thread.start_new_thread(action, (2,))

PyCharm 2022.3.1 (Community Edition)

 

  • 写回答

3条回答 默认 最新

  • Ko-walski 2023-01-01 12:21
    关注

    这里有两种可能性。

    主线程启动了一个线程,但在线程完成执行之前就退出了。因此,标准 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)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 1月1日