编辑: 我最终使用了一种变通方法来获得我想要的行为。 在SSHTunnel中禁用线程(正如公认的答案中所建议的那样)有助于我解决问题。你知道吗
我有一个Python项目可以做一些事情,主要是ETL。 当我在本地运行它时,它工作得很好,当我将它放入docker容器并在本地运行它时,它工作得很好,但是当我在云中运行docker容器时,它死锁了80%。你知道吗
当我手动终止进程时,我得到了下面链接的错误,表明这是线程问题。我没有在代码中的任何地方显式地使用线程(我也不是这方面的专家),并且假设它是我在内部使用线程的库之一。你知道吗
我要解决这个问题的想法是以某种方式抑制在我使用的库的函数调用中发生的所有线程。你知道吗
在Python中有没有一种通用的方法可以做到这一点?你知道吗
该程序的步骤包括将PostGresQL数据移动到googlebigquery中,然后从BigQuery获取数据(包括新数据),用这些数据创建Excel报表并通过电子邮件发送出去。你知道吗
熊猫的数据帧用于内部表示,并使用tou GBQ方法轻松上传到GBQ。 sqlalchemy和sshtunnel用于从Postgresql数据库中提取数据。 Openpyxl用于Excel编辑。你知道吗
整个过程在本地运行不到一分钟(在docker容器内或外部),在服务器上分别手动调用每个步骤也可以正常工作。 (引用的云部署在Google云VM实例上)
我想不出任何方法来全局禁用线程;至少在不破坏每一段使用它的代码的情况下。你知道吗
根据回溯判断,我假设您使用的是来自^{} 包的} 作为默认值。
SSHTunnelForwarder
。这个类接受一个带有True
的布尔参数^{用} 的disable the use而有利于^{} 。这个转发服务器没有使用^{} ,这似乎是您的块出现的地方。因此,这应该可以解决您的问题。
threaded=False
实例化SSHTunnelForwarder
将有利于^{然而,我很想知道为什么你的项目会在云环境中阻塞。从屏幕截图中的输出来看,整个过程似乎几乎完成了,只是在关闭隧道转发器时挂起。
sshtunnel
包的维护者肯定出于某种原因将线程的使用作为默认值。如果可能的话,我想坚持默认,但那只是我:)相关问题 更多 >
编程相关推荐