SciSharp/Numpy.NET

Numpy hangs on exit since version 3.10.1.29 (last stable 3.7.1.28)

BalashovK opened this issue · 7 comments

Versions after 3.7.1.27 sometimes freeze on some operations, and most of the time freeze on application exit.
3.7.1.27 works very reliably.

henon commented

This is quite unspecific and no way for anyone to verify your claims. You need to come up with a simple example that demonstrates the issue.

Hi! I appreciate you taking a look. I can live with 3.7.1.27, but if you fix the latest version, it will be awesome!

Windows 10 - Visual Studio 2022 - create project WinForms for dotnet 6.0 - add Nuget package "Numpy" 3.11.1.31 - add a button to the form - add button event handler with code
NDarray a = np.zeros(2048, 2048);
or
NDarray a = np.zeros((2048, 2048));

Run. It freezes. Break all, look at execution stack:
[External code]
[Waiting on Async Operation, double-click or press enter to view Async Call Stacks]
[External code]
TestNumPy.dll!TestNumPy.Form1.button1_Click(object sender, System.EventArgs e) Line 14
at C:\SRC\TestNumPy\Form1.cs(14)

kill it, delete obj and bin folders, downgrade numpy to 3.7.1.27, rebuild - it works fine.

I have seen it on 3 or 4 different computers running Windows 10. Earlier I have seen it freezing on exit, lately - during the execution. It might be because earlier I have been trying versions like 3.8 and it behave differently from 3.11, or maybe there is some other reason?

Thank you very much for this component! It is the only fast way to run heavy math with complex numbers from C#!

Hi, I have a similar problem, i.e. the program doesn't exit normally after using Numpy.net.

  • Windows 11 22621.963
  • Visual Studio 2022 17.4.2
  • .Net Core 6
  • Numpy.Net 3.11.1.31

Problem reproduction process:

  1. Create a new WPF project in visual studio;
  2. Reference Numpy.dll via Nuget;
  3. Just add any Numpy code in the MainWindow.xaml.cs, e.g.:
using Numpy; //Add

...
public MainWindow()
        {
            InitializeComponent();
            np.array(new int[] { 1, 2, }); //Add
        }
...
  1. Start the debugger, then close the MainWindow.

After the main window is closed, we can see that the program is still running in the background.

Any help is greatly appreciated, thanks.


Update: According to @BalashovK tips, I tested different versions, among which 3.7.1.28 is the last normal version, and the above problems appeared after 3.10.1.29.

henon commented

Right, I noticed it too that my test suite would run through successfully but hang at the end.

My bad, @bianwenbo is correct, last stable version is 3.7.1.28, not 3.7.1.27

henon commented

In v3.10.1.29 I updated to the new pythonnet version which supports python 3. I'll look into it.

henon commented

@BalashovK I have committed a new WPF example showing how to avoid hanging at the end.

image

The important part is to use PythonEngine.BeginAllowThreads(); and wrap all calculations inside using (Py.GIL()) { }. In your application you need to call np.arange(1); before allowing the threads to make sure the python engine has been initialized by the first-time usage of np.

See the source code for details.