2012-09-19 44 views
1

我想要使用NumPy对金字塔中可调用的视图执行一些数组计算。我使用的阵列非常大(3500x3500),所以我想知道加载它的最佳位置是在哪里重复使用。在金字塔中使用NumPy

现在我的应用程序是一个单一的页面,我使用一个单一的视图可调用。

该数组将从磁盘加载并不会更改。

+0

需要更多的细节。你正在运行这个多线程?你的数组是一个单线程,应该在线程之间共享并且永远不会被修改?你是从磁盘上的文件加载还是由于其他计算而得到它? –

+0

回答您的ImportError问题:http://stackoverflow.com/questions/8710918/installing-numpy-as-a-dependency-with-setuptools –

+0

感谢您的链接:您原来的评论的答案在原始问题。我不知道线程,我需要阅读。 – abroekhof

回答

3

如果数组可以在线程之间共享,那么您可以在应用程序启动时将其存储在注册表中(config.registry['my_big_array'] = ??)。如果它不能被共享,那么我建议使用一个排队系统,并且工作人员可以随时加载数据,可能在另一个进程中。你可以通过使注册表中的值成为threadlocal,然后在变量中存储一个新的数组(如果还没有的话)来破解它,但是这样你就会得到每个线程的数组副本,这对于大的东西。

+0

我对金字塔(以及一般的框架)很新,所以我试图解析你的答案。如果线程之间共享某些东西,它只是不需要改变?如果是这样,那么是的:数组对于所有线程都是相同的。 – abroekhof

+1

这是在这里工作的基本多线程主体。如果它不是只读的,那么你需要一个锁定机制来同步对数组的更改。大多数WSGI服务器每个请求使用一个线程,但有些可能使用额外的进程(数组不会共享),所以如果它不是只读的,您需要知道发生了什么。 –

2

我只是将它加载到代码中的显而易见的地方,您需要使用它(在您看来,我猜?)并查看是否存在性能问题。与实际数字一起工作比试图猜测会出现什么问题更好。你通常会对现实感到惊讶。

如果看到性能问题,假设您不需要每个多线程的副本,请尝试在导入后将其加载到全局范围中。如果这不起作用,请尝试将其移入自己的模块并导入。如果这仍然没有帮助...我不知道那是什么。

+0

一个3500x3500的浮点数组(64位)将会大约100Mb。人们可以猜测,在视图函数中(在每个请求上)从磁盘加载它不会超快...... – Sergey