Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 抑制已用库中的多线程?_Python_Python 3.x_Multithreading_Cloud_Python Multithreading - Fatal编程技术网

Python 抑制已用库中的多线程?

Python 抑制已用库中的多线程?,python,python-3.x,multithreading,cloud,python-multithreading,Python,Python 3.x,Multithreading,Cloud,Python Multithreading,编辑: 我最终使用了一种变通方法来获得我想要的行为。 按照公认的答案中的建议,禁用SSHTunnel中的线程有助于我解决问题 我有一个Python项目,它做一些事情,主要是ETL。 当我在本地运行它时,它工作得很好,当我将它装入docker容器并在本地运行它时,它工作得很好,但是当我在云中运行docker容器时,它死锁了80% 当我手动终止进程时,我得到下面链接的错误,表明这是线程问题。我没有在代码中的任何地方明确使用线程(我也不是这方面的专家),并且假设它是我在内部使用线程的库之一 我必须解

编辑: 我最终使用了一种变通方法来获得我想要的行为。 按照公认的答案中的建议,禁用SSHTunnel中的线程有助于我解决问题


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

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

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

在Python中是否有一种通俗易懂的方法可以做到这一点


该程序的步骤包括将PostGresQL数据移动到Google BigQuery中,然后从BigQuery中获取数据(包括新数据),用该数据创建Excel报告并通过电子邮件发送出去

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

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


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

根据回溯判断,我假设您正在使用包中的
SSHTunnelForwarder
。该类将带有
True
的布尔参数作为默认值。

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


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

Hmm,情节变厚了。抑制SSHTunnelForwarder中的线程现在可以让我在本地重现该行为。我想我可能没有完全退出服务器,但这似乎没有什么区别。@Mara这里的人有什么可以帮助的吗?在这种情况下,我们可能需要更多的信息。