我正在一个web服务器(apache+modwsgi+django)上使用pandas
,并且有一个很难重现的bug,现在我发现这个bug是由于pandas没有线程安全性造成的。
经过大量的代码缩减,我终于找到了一个简短的独立程序,可以用来重现问题。你可以在下面看到。
要点是:与this question的答案相反,这个例子表明,即使使用非常简单的操作(不修改数据帧),pandas也可能崩溃。我无法想象这个简单的代码片段在线程中是如何不安全的。。。
问题是在web服务器中使用pandas和numpy。有可能吗?我应该如何使用pandas修复我的代码?(一个使用锁的例子会有帮助)
下面是导致分段错误的代码:
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()
我的环境:python 2.7.3,numpy 1.8.0,pandas 0.13.1
目前没有回答
相关问题 更多 >
编程相关推荐