У меня есть код IronPython
, вызываемый из приложения C#
.
Этот код работал нормально, пока я решил изменить одну функцию для запуска в потоке.
когда функции numpy, вызываемые в потоке python, генерируются исключение InsufficientMemoryException
.
Я искал решения, но не нашел. может кто-нибудь объяснить, почему это происходит и как я могу это исправить?
Я думаю, что это происходит только тогда, когда у меня есть два потока, которые используют numpy
Я запускаю код следующим образом:
С#
_python.functionA(); # _python was created with "Python.CreateEngine()"
_python.functionA(); # twice on purpose
Python:
my_python_script.py
import threading
import time
import numpy
def blah():
print numpy.array([100,100,0])
def functionA():
t = threading.Timer(0,blah)
t.start()
time.sleep(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.
Спасибо
ОБНОВЛЕНИЕ 13/07/14
Я получаю это исключение, даже когда я запускаю только один поток и через интерпретатор IronPython без С#:
C:\>"c:\Program Files\IronPython 2.7.1\ipy.exe"
IronPython 2.7.1 (2.7.0.40) on .NET 4.0.30319.18063
Type "help", "copyright", "credits" or "license" for more information.
>>> execfile(r"c:\workspace\my_python_script.py")
>>> functionA()
>>> 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 6, in blah
print numpy.array([100,100,0])
MemoryError: Exception of type 'System.InsufficientMemoryException' was thrown.