Pandas和纽米线安全

2024-06-06 10:36:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在一个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


Tags: 代码importnumpy服务器webtruepandasdata