C# 在线程中使用numpy时,IronPython抛出的MemoryException不足

C# 在线程中使用numpy时,IronPython抛出的MemoryException不足,c#,python,multithreading,numpy,ironpython,C#,Python,Multithreading,Numpy,Ironpython,我有一些IronPython代码是从C#应用程序中调用的。 在我决定将一个函数改为在线程中运行之前,这段代码一直运行良好。 当在python线程中调用numpy函数时,会引发内存不足异常异常。 我寻找解决办法,但没有找到。有人能解释为什么会发生这种情况,我该如何解决 我认为只有当我有两个线程使用numpy 我运行的代码如下: C#: Exception in thread Thread-1: Traceback (most recent call last): File "c:\Progra

我有一些
IronPython
代码是从
C#
应用程序中调用的。
在我决定将一个函数改为在线程中运行之前,这段代码一直运行良好。
当在python线程中调用numpy函数时,会引发
内存不足异常
异常。
我寻找解决办法,但没有找到。有人能解释为什么会发生这种情况,我该如何解决

我认为只有当我有两个线程使用
numpy

我运行的代码如下:

C#:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "c:\Program Files\IronPython 2.7.1\Lib\threading.py", line 552, in _Thread__bootstrap_inner
    self.run()
  File "c:\Program Files\IronPython 2.7.1\Lib\threading.py", line 756, in run
    self.function(*self.args, **self.kwargs)
  File "C:\workspace\my_python_script.py", line 113, in blah
    print numpy.array([100,100,0])
MemoryError: Exception of type 'System.InsufficientMemoryException' was thrown.
_python.functo()#_python是用“python.CreateEngine()”创建的
_python.functionA();#故意两次
Python:
my_python_script.py

导入线程
导入时间
进口numpy
def blah():
打印numpy.array([100100,0])
def function():
t=线程。计时器(0,废话)
t、 开始()
时间。睡眠(2)
我得到了一个例外:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "c:\Program Files\IronPython 2.7.1\Lib\threading.py", line 552, in _Thread__bootstrap_inner
    self.run()
  File "c:\Program Files\IronPython 2.7.1\Lib\threading.py", line 756, in run
    self.function(*self.args, **self.kwargs)
  File "C:\workspace\my_python_script.py", line 113, in blah
    print numpy.array([100,100,0])
MemoryError: Exception of type 'System.InsufficientMemoryException' was thrown.
谢谢

更新2014年7月13日

即使我只运行一个线程,并且通过IronPython解释器,没有C#,我也会遇到这个异常:


我相信numpy不是线程安全的。我遇到了一个类似的问题,在线程中使用
np.asarray()
会使我的程序崩溃。numpy的
array
函数构建数组的方式似乎不是线程安全的。我发现解决这个问题的方法是使用
np.fromiter()
。显然,它是线程安全的。它稍微慢一点,这是因为如果它不使用线程,但它可以工作。尝试将数据放入列表(或其他可编辑的数据结构)并使用
np.fromiter()
将其转换为numpy数组


另外,正如您所知,它实际上在我的计算机上运行得很好,所以可能是因为您没有足够的内存来处理线程(或者至少在使用numpy时没有)。

您有多少处理器?我现在不确定,它在我的工作计算机上。但我相信它至少是双的,也许是四的。具体到什么程度很重要吗?您可能会阅读并看看这是否解决了您的问题。四核,但这并没有解决问题:(您确定
numpy
是线程安全的吗?以及使用的其他库吗?我希望解决此问题,而不是解决方法,因此我还不接受此答案(可能解决方案将在稍后出现).然而,可能没有更好的解决方案,而你的答案是目前为止最好的,所以你得到了赏金