簡體   English   中英

從服務器執行時,Python腳本崩潰

[英]Python script crashes when executed from server

我正在通過php exec函數在本地執行python腳本,並且一切正常。 現在是時候該在服務器中移動項目了,執行相同的python腳本時遇到了一些問題。

在這兩種情況下,我都有相同版本的Python(2.7.3),並且安裝了所有必需的庫。 我發現了問題的出處,但我不知道為什么。 這是我的python腳本中的這一行:

import networkx as nx
CG1_nodes=nx.connected_components(G1)[:]

它在本地成功運行,但在服務器中崩潰。 我發現如果刪除:

[:]

然后就可以了。 我還檢查了G1的內容及其填充。 知道我在這里缺少什么嗎?

您正在消耗發電機。 它可能有數十億個項目。 如果是這種情況,則python可能資源不足。 通過檢查結果列表的大小來確保您不會使系統超載。

我還將研究networkx (NumPy?SciPy?)使用的庫中的切片問題。 也許嘗試:

CG1_nodes=list(nx.connected_components(G1))

避免切片。

在兩種情況下,您都應檢查您是否具有相同版本的networkx。

在較舊的networkx版本中,列表為nx.connected_components(G1) 在較新的版本(1.9.1)中,它是一個生成器。 如果X是生成器,則X[:]不起作用。 但是,如果X是一個列表,它就可以。 因此,如果您的計算機和服務器具有不同的版本,則在一種情況下是允許的,但在另一種情況下則不允許。

您通過刪除[:] “修復”此問題,因此CG1_nodes現在是生成器,而不是列表。 只要您之前使用它與生成器一致,結果(可能)是相同的。 因此,這兩個代碼將起作用。 顯然,明確地將其設為列表是可行的,但可能會占用大量內存。

更多詳細信息在此處記錄 特別注意:

若要恢復以前的行為,請使用list(connected_components(G))

我相信以前的版本會返回按減小的組件大小排序的列表。 新版本未排序。 如果需要對它進行排序,則需要做更多的事情:

sorted(list(nx.connected_components(G)), key = len, reverse=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM