使用pydev进行测试时,我遇到了问题.我已经挖掘了这个问题并知道根本原因是什么.我提供了以下代码的示例,可用于重现该问题.
我主要测试Centos 6.3,python 2.7,eclipse juno,pydev 2.7.1,但问题也出现在具有类似设置的Windows 7上.
我有一个python脚本,作为服务器不同线程的进程启动器(所有内部第三方库,所以我不能辞去系统的那一面).
为了确保所有线程都在我的process.py结束时完成,我有一段代码试图在退出之前加入所有线程.
for t in threading.enumerate():
if t.getName() != 'MainThread':
t.join()
Run Code Online (Sandbox Code Playgroud)
这在正常的生产代码中工作正常.
使用pydev在eclipse中运行PyUnit中的测试时会出现问题.额外的线程被添加到python导致我的测试挂起.
如果我使用Run As - > Python Run启动我的程序,我的代码按预期运行并退出正常.如果我使用Run As - > Python unit-test启动我的程序,测试总是挂起.
如果我看一下线程是否可用,问题就会变得清晰.使用提供的测试代码示例,我可以看到当运行测试作为python运行时,显示以下线程(如预期的那样)
Thread: <bound method _MainThread.getName of <_MainThread(MainThread, started 140268135126784)>>
Thread: <bound method ThreadClass.getName of <ThreadClass(Thread A, started 140268006471424)>>
Thread: <bound method ThreadClass.getName of <ThreadClass(Thread B, started 140267927631616)>>
Run Code Online (Sandbox Code Playgroud)
当我将测试作为单元测试运行时
Thread: <bound method _MainThread.getName of <_MainThread(MainThread, started 139904571213568)>>
Thread: <bound method WriterThread.getName of <WriterThread(pydevd.Writer, started daemon 139904379361024)>>
Thread: <bound method ThreadClass.getName …Run Code Online (Sandbox Code Playgroud)