抑制多线程中使用库?

问题描述 投票:0回答:1

编辑:最后我用一种变通方法来获得我想要的行为。作为接受的答案建议在SSHTunnel禁用线程帮我牵制的问题。


我有一个Python项目,做了几件事情,主要是ETL。它工作正常,当我在本地运行,正常工作时,我的东西它变成一个码头工人的容器和运行在本地,但在当我在云中运行的是搬运工容器锁死80%。

当我手动终止过程中,我得到的错误如下链接,这表明它是一个线程问题。我没有明确地使用在我的代码的任何地方线程(和我没有关于该问题的专家),并假设它是我使用的是采用线程内部的图书馆之一。

我不得不解决这个问题的想法是以某种方式抑制了在我使用的库的函数调用发生的所有线程。

是否有一个包罗万象的方式做到这一点在Python?


该计划的步骤包括:移动PostgreSQL的数据导入谷歌的BigQuery,然后从BigQuery的读取数据(包括新数据),指出数据创建一个Excel报表,并通过电子邮件发送出去。

大熊猫数据帧用于内部表示和方便上传使用to_gbq方法吉贝。 SQLAlchemy的和sshtunnel用于从PostgreSQL数据库中提取数据。 Openpyxl用于Excel的编辑。

整个事情花费不到一分钟到本地运行(符合或外部的搬运工容器)和手动调用每个步骤分别在服务器上也能正常工作。 (引用的云部署是在谷歌云VM实例)

python python-3.x multithreading cloud python-multithreading
1个回答
1
投票

我想不出什么办法来全局禁用线程;至少在没有破每一段代码,将使用它。

通过回溯来看,我假设你正在使用SSHTunnelForwardersshtunnel包。这个类需要一个boolean参数threadedTrue作为默认值。

SSHTunnelForwarder实例化threaded=False将有利于disable the use_ThreadingForwardServer_ForwardServer的。此转发服务器没有使用socketserver.ThreadingMixIn,这就是你的块似乎浮出水面。所以,应该解决您的问题。

不过,我很好奇,想知道为什么在云计算背景下的项目的块。在你的屏幕截图输出来看,整个事情似乎是几乎完全和关闭隧道转发的时候只是挂起。在sshtunnel包的维护者无疑取得了使用线程的一个原因默认的。我想,如果在任何可能的方式坚持到默认,但是这只是我:)

© www.soinside.com 2019 - 2024. All rights reserved.