Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在金字塔中使用NumPy_Python_Numpy_Pyramid - Fatal编程技术网

Python 在金字塔中使用NumPy

Python 在金字塔中使用NumPy,python,numpy,pyramid,Python,Numpy,Pyramid,我想使用NumPy对金字塔中可调用的视图执行一些数组计算。我使用的阵列相当大(3500x3500),因此我想知道在哪里加载它以供重复使用 现在,我的应用程序是一个页面,我使用的是一个可调用的单视图 阵列将从磁盘加载,并且不会更改 如果数组可以在线程之间共享,那么可以在应用程序启动时将其存储在注册表中(config.registry['my\u big\u array']=??)。如果它不能被共享,那么我建议使用一个工人的排队系统,可以随时加载数据,可能是在另一个过程中。您可以通过将注册表中的值设

我想使用NumPy对金字塔中可调用的视图执行一些数组计算。我使用的阵列相当大(3500x3500),因此我想知道在哪里加载它以供重复使用

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


阵列将从磁盘加载,并且不会更改

如果数组可以在线程之间共享,那么可以在应用程序启动时将其存储在注册表中(
config.registry['my\u big\u array']=??
)。如果它不能被共享,那么我建议使用一个工人的排队系统,可以随时加载数据,可能是在另一个过程中。您可以通过将注册表中的值设置为threadlocal,然后在变量中存储一个新数组(如果还没有)来解决此问题,但是,每个线程都会有一个数组的副本,对于这么大的东西来说,这不是一个好主意。

如果数组可以在线程之间共享,那么可以在应用程序启动时将其存储在注册表中(
config.registry['my_big_array']=??
)。如果它不能被共享,那么我建议使用一个工人的排队系统,可以随时加载数据,可能是在另一个过程中。您可以通过将注册表中的值设置为threadlocal,然后在变量中存储一个新数组(如果还没有),来解决这个问题,但是这样每个线程都会有一个数组的副本,对于这么大的对象来说,这真的不是一个好主意。

我只会将它加载到代码中需要使用它的明显位置(在你看来,我猜?)然后看看你是否有性能问题。最好是用实际的数字,而不是试图猜测什么会成为问题。你通常会对现实感到惊讶


如果您确实看到性能问题,假设您不需要为多个线程中的每个线程都提供一个副本,请尝试在导入后将其加载到全局作用域中。如果这不起作用,请尝试将其移动到其自己的模块中并导入。如果仍然没有帮助,我不知道接下来会发生什么。

我只会将其加载到代码中显而易见的位置,您需要在哪里使用它(我猜是在您看来?),并查看您是否存在性能问题。最好使用实际数字,而不是试图猜测将出现什么问题。您通常会对现实感到惊讶


如果您确实看到性能问题,假设您不需要为多个线程中的每个线程都提供一个副本,请尝试在导入后将其加载到全局范围中。如果这不起作用,请尝试将其移动到其自己的模块中并导入。如果仍然没有帮助…我不知道接下来会发生什么。

需要更多详细信息。您正在运行此多线程吗?你的数组是一个应在线程之间共享且从不修改的单例数组吗?你是从磁盘上的文件加载还是通过其他计算得到它?回答你的导入问题:感谢链接:对你先前评论的回答在原始问题中。我不知道线程,我需要阅读这些内容t、 需要更多详细信息。您是否正在运行此多线程?您的阵列是否是应在线程之间共享且从不修改的单实例?您是从磁盘上的文件加载还是通过其他计算获得它?回答您的导入问题:感谢链接:您之前的评论的答案在原始问题中我不知道线程,我需要深入了解它。我对金字塔(和一般的框架)非常陌生因此,我试图解析您的答案。如果线程之间共享了某些内容,则永远不需要更改?如果是,则是:所有线程的数组都将是相同的。这是基本的多线程主体。如果它不是只读的,则需要锁定机制来同步对数组的更改。大多数WSGI服务器每个线程使用一个线程请求,但有些可能会使用额外的进程(数组不会共享),因此如果它不是readonly,您需要知道发生了什么。我对Pyramid(以及一般的框架)非常陌生因此,我试图解析您的答案。如果线程之间共享了某些内容,则永远不需要更改?如果是,则是:所有线程的数组都将是相同的。这是基本的多线程主体。如果它不是只读的,则需要锁定机制来同步对数组的更改。大多数WSGI服务器每个线程使用一个线程请求,但有些可能会使用额外的进程(阵列不会共享),因此,如果它不是只读的,则需要了解发生了什么。3500x3500浮点数组(64位)的大小将约为100Mb。可以猜测,在查看功能中从磁盘加载它(在每次请求时)不会很快…3500x3500浮点数组(64位)的大小大约为100Mb。可以猜测,在查看功能中从磁盘加载它(在每次请求时)不会很快。。。