为什么使用 PyCharm 运行用例成功却无法退出?

当使用PyCharm运行包含线程逻辑的unittest用例时,成功后无法退出。问题源于未显式结束线程,导致unittest框架等待线程结束。解决方案包括:不执行线程逻辑、显式退出进程或优雅地退出线程。文章详细分析了问题原因并提供了三种解决办法。
摘要由CSDN通过智能技术生成

相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】

有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!

前言

前段时间由于将项目使用的某 SDK 进行了升级,在使用 PyCharm+unittest 运行一个用例时,能运行并输出果,却一直无法退出用例。随着排查的深入,发现是此 SDK 中的线程在“作祟”。

用简单的代码复现

简单起见,下面这段代码(Python 2)包含了简单的线程逻辑和一个用例,来复现遇到的问题:

# coding: utf-8
import threading
import time
import unittest


def tick():
    while True:
        print('tick')
        time.sleep(3)


t = threading.Thread(target=tick)
t.start()


class TestString(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

这段代码开启了一个线程,每隔 3 秒输出 tick。另一方面,定义了一个用例,判断字符串的upper()方法。如果删除线程逻辑,用例能正常结束;反之,PyCharm 显示用例执行成功,却一直无法退出用例,如下图所示:在这里插入图片描述

为什么不能退出?

运行用例前一定会开启新线程,执行 tick() 函数,由于此函数使用 while 循环不断输出字符串,不难推断出是用例框架在退出时一直等待线程结束,进而导致用例无法退出。

为了验证这个想法,不妨查看 PyCharm 运行用例的入口代码。不同的操作系统、PyCharm(社区版、专业版)和单测框架下用例入口文件路径都有所不同。Mac 上的 PyCharm 社区版针对 unittest 的用例入口文件路径为

“/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pycharm/_jb_unittest_runner.py” ,

该文件内容如下:

# coding=u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值