我正在使用带有sql-alchemy和flask的postgres数据库。我有几个工作,我必须通过整个数据库来更新条目。当我在本地计算机上执行此操作时,与服务器相比,我得到的行为非常不同。 例如。我可以从数据库中获得多少条目似乎有一个上限? 在我的本地机器上,我只查询所有元素,而在服务器上,我必须逐步查询2000个条目。 如果我有太多条目,服务器会给我“消息”消息。 我想知道 1.谁在杀害我的工作(sqlalchemy,postgres)? 2.由于这在我的本地机器上似乎表现不同,因此必须有一种方法来控制它。那会是哪里? 谢谢 卡尔
答案 0 :(得分:3)
只是消息"被杀#34;出现在终端窗口中通常意味着内核耗尽内存并将该过程作为紧急措施终止。
默认情况下,大多数连接到PostgreSQL的库都会将整个结果集读入内存。但是有些库有一种方法可以告诉它逐行处理结果,因此它们不能一次读入内存。我不知道烧瓶是否有这个选项。
也许您的本地计算机具有比服务器更多的可用RAM(或者它对RAM具有的RAM要求更少),或者您的本地计算机可能被配置为逐行而不是一次性地从数据库读取。
答案 1 :(得分:0)
很可能内核正在杀死你的Python脚本。 Python可能会使用可怕的内存。
我有一种感觉,你试图在一个Python进程中循环执行这些2000个入口批处理。 Python不会释放所有使用过的内存,因此内存使用量会增加,直到它被杀死。 (您可以使用top
命令进行观察。)
您应该尝试调整脚本以在一个步骤中处理2000条记录,然后退出。如果你多次运行,它应该从它停止的地方继续。或者,更好的选择,尝试使用multiprocessing并在单独的工作程序中运行每个作业。连续完成工作,当他们完成时让他们死去。这样,当他们退出时,他们会将内存释放回操作系统。