2017-01-18 53 views
0

掛起我要運行ndarray.dot(陣列狀物體)要麼在Python 2.7和在EXEC()函數 3.4的問題 - 蟒掛起並且我需要關閉它。基於Numpy "dot" hangsmultiprocessing with numpy quits Python這是一個已知的問題。當使用多處理庫時,由於死鎖,python掛起。ndarray.dot()函數在EXEC

以下代碼的行爲如何使用exec()exec()是否創建一個新線程?有沒有解決方案來解決它?

實際代碼更復雜,所以我需要使用exec()。

test_dot.py:

test_global_env = { 
    '__builtins__': None, 
    'np': numpy 
} 
test_local_env = {} 
test = ''' 
result = np.array([[1, 2], [3, 4]]).dot([0.14, 0.1]) 
''' 
if __name__ == '__main__': 
    exec(test, test_global_env, test_local_env) 

謝謝。

回答

1

這可能與行'__builtins__': None,有關。如果你註釋這一行,你的代碼將工作得很好。順便說一句。這條線的目的是什麼?

exec不會創建另一個線程,它會在當前線程和任何其他函數中執行。代碼的其餘部分只是在繼續之前等待exec完成。

+0

太棒了,你是對的。由於我創建了一個「IDE」/「沙箱」來運行各種python代碼,因此我不能讓用戶使用builtins中的每個函數或類。我想只允許像min,max,tuple,dict,range,iter,isinstance,enumerate,iter這樣的函數。但不想允許__import__。 – regiea

+0

那麼,我不知道是否一切都會工作,如果你調用的代碼將需要在後臺導入一些導入來運行(我的意思是如果例如'np.dot()'導入的東西)? –