小编joe*_*eld的帖子

使用thread.join确保所有线程都已连接时出现Pydev PyUnit问题

使用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)

python eclipse-plugin pydev python-2.7 python-unittest

5
推荐指数
1
解决办法
579
查看次数