我在網絡服務器(apache + modwsgi + django)上使用pandas
,並且有一個難以複製的bug,現在我發現它是由不是線程安全的熊貓引起的。熊貓和numpy線程安全
經過大量的代碼縮減後,我終於找到了一個簡短的獨立程序,可以用來重現問題。你可以在下面看到它。
重點是:與this question的回答相反,這個例子表明即使非常簡單的操作不會修改數據幀,熊貓也會崩潰。我無法想象這個簡單的代碼片斷如何可能與線程不安全...
問題是關於在網絡服務器中使用熊貓和numpy。可能嗎?我應該如何使用熊貓來修復我的代碼? (鎖的使用的一個例子將是有益的)
這裏是使段錯誤的代碼:
import threading
import pandas as pd
import numpy as np
def let_crash(crash=True):
t = 0.02 * np.arange(100000) # ok con 10000
data = pd.DataFrame({'t': t})
if crash:
data['t'] * 1.5 # CRASH
else:
data['t'].values * 1.5 # THIS IS OK!
if __name__ == '__main__':
threads = []
for i in range(100):
if True: # asynchronous
t = threading.Thread(target=let_crash, args =())
t.daemon = True
t.start()
threads.append(t)
else: # synchronous
let_crash()
for t in threads:
t.join()
我的環境:蟒2.7.3,1.8.0 numpy的,熊貓0.13.1
不會爲我崩潰。 Python 2.7.6,numpy 1.8.2,熊貓0.14.1。我嘗試了主循環,直到「10000」。 – osa 2014-09-24 04:22:50