Reloading/shutdown support of embedding CPython with pythonnet was added in
the master branch. See this pull request:

https://github.com/pythonnet/pythonnet/pull/752

On Thu, Oct 4, 2018 at 9:50 PM Denis Akhiyarov <denis.akhiya...@gmail.com>
wrote:

> Please search the issue tracker on github for shutdown related issues.
> This was discussed extensively.
>
> There is WIP pull request worked on by 3 people to support this reloading
> scenario in Unity.
>
>
> On Wed, Oct 3, 2018, 9:50 PM Ron Harding via PythonDotNet <
> pythondotnet@python.org> wrote:
>
>> Did you try background or threadpool threads? Redirected process calls
>> and looking for stdin stdout stderr streams allows more control.
>>
>> Sent from Yahoo Mail on Android
>> <https://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature>
>>
>> On Wed, Oct 3, 2018 at 15:47, Luke, Steve
>> <steve.l...@moldev.com> wrote:
>>
>> I am getting a crash trying to embed Python into my VB program using
>> Python for .NET.  The goal of my application is to allow users to run
>> their own python scripts inside a larger application.  The crash I am
>> getting happens the second time I run a script that imports certain large
>> libraries (like numpy or scikit-image) but does not affect all libraries
>> (for example PIL).
>>
>>
>>
>> My environment:
>>
>> Windows 10 Pro x64, Python 3.6.5 (in Anaconda), Python for .Net 2.4.0
>> (installed from git’s master branch).
>>
>>
>>
>> Here is the VB code:
>>
>>     Public Function Startup(ByRef param As String) As Integer
>>
>>         PythonEngine.Initialize()
>>
>>         'mm.PrintMsg(PythonEngine.BuildInfo)
>>
>>         'mm.PrintMsg(PythonEngine.Compiler)
>>
>>         'mm.PrintMsg(PythonEngine.Platform)
>>
>>         'mm.PrintMsg(PythonEngine.ProgramName)
>>
>>         'mm.PrintMsg(PythonEngine.PythonHome)
>>
>>         'mm.PrintMsg(PythonEngine.PythonPath)
>>
>>         Using (Py.GIL())
>>
>>
>>
>>             Dim scriptPath As String = param
>>
>>
>>
>>             Dim scriptDir As String = Path.GetDirectoryName(scriptPath)
>>
>>             Dim scriptName As String = GetPythonModuleName(scriptPath)
>>
>>             Dim scriptParam As String = ""
>>
>>
>>
>>             Dim scriptScope As PyScope = Py.CreateScope()
>>
>>
>>
>>             Dim scriptText As String =
>> My.Computer.FileSystem.ReadAllText(scriptPath)
>>
>>             scriptScope.Exec(scriptText)
>>
>>
>>
>>             If scriptScope.Contains(STARTUP_METHOD_NAME) Then
>>
>>                 scriptScope.Exec(String.Format("{0}(r'{1}')",
>> STARTUP_METHOD_NAME, scriptParam))
>>
>>             End If
>>
>>
>>
>>             scriptScope.Dispose()
>>
>>         End Using
>>
>>         PythonEngine.Shutdown()
>>
>>
>>
>>         Return 0
>>
>>     End Function
>>
>>
>>
>> And this is the Python script I am running:
>>
>> import skimage.io
>>
>>
>>
>> def Startup(param):
>>
>>     pass
>>
>>
>>
>> def Docommand(param):
>>
>>     pass
>>
>>
>>
>> def Shutdown():
>>
>>     pass
>>
>>
>>
>> When I run it the VB code the first time, things work great.  When I run
>> the VB code a second time (without first restarting the entire application)
>> I get an access violation exception on the scriptScope.Exec() call:
>>
>> *Exception:* System.AccessViolationException :
>>
>> *Message:* Attempted to read or write protected memory. This is often an
>> indication that other memory is corrupt.
>>
>> *Source:* Python.Runtime
>>
>> *StackTrace:*
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyObject_Call(IntPtr pointer, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.ImportHook.__import__(IntPtr self, IntPtr args,
>> IntPtr kw)
>>
>>    at Python.Runtime.Runtime.PyRun_String(String code, IntPtr st, IntPtr
>> globals, IntPtr locals)
>>
>>    at Python.Runtime.PyScope.Exec(String code, IntPtr _globals, IntPtr
>> _locals)
>>
>>    at MyApp.MyClass.Startup(String& param) in
>> C:\Git\MyPath\MyApp.vb:line 132
>>
>>  Unfortunately the stack trace doesn't show line numbers for anything in
>> the Python.Runtime.
>>
>>
>>
>> Interestingly, if you look at the VB code, I have some lines of commented
>> out code:
>>
>>         'mm.PrintMsg(PythonEngine.BuildInfo)
>>
>>         'mm.PrintMsg(PythonEngine.Compiler)
>>
>>         'mm.PrintMsg(PythonEngine.Platform)
>>
>>         'mm.PrintMsg(PythonEngine.ProgramName)
>>
>>         'mm.PrintMsg(PythonEngine.PythonHome)
>>
>>         'mm.PrintMsg(PythonEngine.PythonPath)
>>
>>
>> Since the app doesn’t have a console, this sends the text to the
>> enclosing app for display.  If I uncommon that code, then the first time
>> I run it I get:
>>
>> default, Mar 29 2018, 13:32:41
>>
>> [MSC v.1900 64 bit (AMD64)]
>>
>> win32
>>
>> python
>>
>>
>>
>> F:\Anaconda3\python36.zip;F:\Anaconda3\Lib;F:\Anaconda3\DLLs;C:\MX6
>>
>>
>>
>> And the second time I run it I get:
>>
>> default, Mar 29 2018, 13:32:41
>>
>> [MSC v.1900 64 bit (AMD64)]
>>
>> win32
>>
>> *pyth???*
>>
>> *???*
>>
>> F:\Anaconda3\python36.zip;F:\Anaconda3\Lib;F:\Anaconda3\DLLs;C:\MX6
>>
>>
>>
>> And the application doesn’t crash!  Instead it just says the skimage
>> module can’t be found.  Notice the bolded lines (bold added after the
>> fact).  The program name and python home values are being corrupted.
>>
>> Is there something I am doing wrong as far as taking down the
>> PythonEngine such that it could be put back up in an as-new state later on?
>>
>>
>> Steve
>>
>>
>> Please be advised that this email may contain confidential information.
>> If you are not the intended recipient, please notify us by email by
>> replying to the sender and delete this message. The sender disclaims that
>> the content of this email constitutes an offer to enter into, or the
>> acceptance of, any agreement; provided that the foregoing does not
>> invalidate the binding effect of any digital or other electronic
>> reproduction of a manual signature that is included in any attachment.
>> _________________________________________________
>> Python.NET mailing list - PythonDotNet@python.org
>> https://mail.python.org/mailman/listinfo/pythondotnet
>>
>> _________________________________________________
>> Python.NET mailing list - PythonDotNet@python.org
>> https://mail.python.org/mailman/listinfo/pythondotnet
>>
>
_________________________________________________
Python.NET mailing list - PythonDotNet@python.org
https://mail.python.org/mailman/listinfo/pythondotnet

Reply via email to