웹 서버 (apache + modwsgi + django)에서 pandas
을 사용하고 있으며, 판다가 스레드로부터 안전하지 않아서 발견 된 버그를 재현하기가 어렵습니다.팬더와 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, NumPy와 1.8.0, 팬더 0.13.1
다음 이 분할 오류를 일으키는 코드 (잠금 사용의 예 도움이 될 것입니다)
나를 위해 충돌하지 않습니다. Python 2.7.6, numpy 1.8.2, pandas 0.14.1. 나는 '10000'까지 메인 루프를 시도했다. – osa