在旧库中抑制多线程?

2024-04-19 14:55:06 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑: 我最终使用了一种变通方法来获得我想要的行为。 在SSHTunnel中禁用线程(正如公认的答案中所建议的那样)有助于我解决问题。你知道吗


我有一个Python项目可以做一些事情,主要是ETL。 当我在本地运行它时,它工作得很好,当我将它放入docker容器并在本地运行它时,它工作得很好,但是当我在云中运行docker容器时,它死锁了80%。你知道吗

当我手动终止进程时,我得到了下面链接的错误,表明这是线程问题。我没有在代码中的任何地方显式地使用线程(我也不是这方面的专家),并且假设它是我在内部使用线程的库之一。你知道吗

我要解决这个问题的想法是以某种方式抑制在我使用的库的函数调用中发生的所有线程。你知道吗

在Python中有没有一种通用的方法可以做到这一点?你知道吗


该程序的步骤包括将PostGresQL数据移动到googlebigquery中,然后从BigQuery获取数据(包括新数据),用这些数据创建Excel报表并通过电子邮件发送出去。你知道吗

熊猫的数据帧用于内部表示,并使用tou GBQ方法轻松上传到GBQ。 sqlalchemy和sshtunnel用于从Postgresql数据库中提取数据。 Openpyxl用于Excel编辑。你知道吗

整个过程在本地运行不到一分钟(在docker容器内或外部),在服务器上分别手动调用每个步骤也可以正常工作。 (引用的云部署在Google云VM实例上)

error message


Tags: 数据方法docker答案编辑步骤手动线程
1条回答
网友
1楼 · 发布于 2024-04-19 14:55:06

我想不出任何方法来全局禁用线程;至少在不破坏每一段使用它的代码的情况下。你知道吗

根据回溯判断,我假设您使用的是来自^{}包的SSHTunnelForwarder。这个类接受一个带有True的布尔参数^{}作为默认值。

threaded=False实例化SSHTunnelForwarder将有利于^{}disable the use而有利于^{}。这个转发服务器没有使用^{},这似乎是您的块出现的地方。因此,这应该可以解决您的问题。

然而,我很想知道为什么你的项目会在云环境中阻塞。从屏幕截图中的输出来看,整个过程似乎几乎完成了,只是在关闭隧道转发器时挂起。sshtunnel包的维护者肯定出于某种原因将线程的使用作为默认值。如果可能的话,我想坚持默认,但那只是我:)

相关问题 更多 >