python的ThreadPool';s的多处理挂起
我的一个单元测试出现了幻觉问题。 我使用python的ThreadPool';s的多处理挂起,python,multithreading,threadpool,Python,Multithreading,Threadpool,我的一个单元测试出现了幻觉问题。 我使用multiprocessing中的ThreadPool包包装stdout和stderr类中的函数,使用paramiko。在创建过程中,我使用下面的代码进行了一些真实的测试,效果很好。但在为该代码编写单元测试时,我遇到了问题,ThreadPool的这种用法被搁置了 这一部分在95%的时间内都会挂起,有时会正确执行 我在调试期间检查了这些值,发现有时有一个或其他条件设置为finished,但另一个没有设置。但是这两个函数都已经完成了,所以结果只是询问未来永远不
multiprocessing
中的ThreadPool
包包装stdout
和stderr
类中的函数,使用paramiko
。在创建过程中,我使用下面的代码进行了一些真实的测试,效果很好。但在为该代码编写单元测试时,我遇到了问题,ThreadPool
的这种用法被搁置了
这一部分在95%的时间内都会挂起,有时会正确执行
我在调试期间检查了这些值,发现有时有一个或其他条件设置为finished,但另一个没有设置。但是这两个函数都已经完成了,所以结果只是询问未来永远不会改变的状态
复制代码(具有此问题所需的功能):
像往常一样,我在花了一段时间咒骂和喝茶之后找到了答案 解决方案是在关闭后添加以下方法:
stdout_t.join()
stderr_t.join()
因此,这是整个修复零件:
def __fetch_streams(self, stdout_func, stderr_func):
stdout_t = ThreadPool(processes=1)
stderr_t = ThreadPool(processes=1)
self.__stdout_async_r = stdout_t.apply_async(func=stdout_func)
self.__stderr_async_r = stderr_t.apply_async(func=stderr_func)
stdout_t.close()
stderr_t.close()
stdout_t.join()
stderr_t.join()
像往常一样,我在花了一段时间咒骂和喝茶之后找到了答案 解决方案是在关闭后添加以下方法:
stdout_t.join()
stderr_t.join()
因此,这是整个修复零件:
def __fetch_streams(self, stdout_func, stderr_func):
stdout_t = ThreadPool(processes=1)
stderr_t = ThreadPool(processes=1)
self.__stdout_async_r = stdout_t.apply_async(func=stdout_func)
self.__stderr_async_r = stderr_t.apply_async(func=stderr_func)
stdout_t.close()
stderr_t.close()
stdout_t.join()
stderr_t.join()