On Monday, December 26, 2016 at 5:27:33 AM UTC-2, jumppan...@gmail.com wrote:
> I'm using the python3.6 DLL to embed Python 3 inside a Windows application.
> 
> Here is some background into how Python is being used.
> 
> 1. Firstly the same basic code worked fine with the earlier Python 2.7 
> version.
> 
> 2. The code is structured as follows:
> 
>     Windows Executable
>         +
>         |
>         + Scripting DLL
>               +
>               |
>               + Pthyhon 3.6 DLL
> 
> In other words the executable talks to the Scripting DLL and the scripting 
> DLL then talks to the Python DLL.
> 
> 3. To run a script the following flow control is used:
> 
>     a. Application loads the Scripting DLL
>         i.  The Scripting DLL calls Py_Initialize found in the Python DLL
> 
>     b. Application run the script file using the Scripting DLL
>         i.  The Scripting DLL calls PyRun_SimpleFileEx in the Python DLL to 
> run the script
> 
>     c. Unload the scripting DLL
>         i.  The Scripting DLL calls Py_FinalizeEx in the Python DLL clean up
> 
> Symptoms of the Problem
> -----------------------
> The problem can be replicated by a script that contains nothing but a single 
> import statement.
> 
> Using this test script the script can be run and re-run any number of times:
> 
>     import sys
> 
> Using this test script the script will run the first time but fail every 
> subsequent time:
> 
>     import socket
> 
> The difference in the two import statements is the former is a built-in 
> module while the later is using a dynamically loaded module.
> 
> The Cause of the Problem
> ------------------------
> I tracked down the cause of the problem to the fact the python36.dll unloads 
> just fine for the first case but fails to unloaded for the second case.
> 
> So when the application loads and unloads the Scripting DLL the python36.dll 
> remains loaded.
> 
> Then when the python36.dll is used the second time it now contains pointers 
> to stale data and crashes on the second run.
> 
> The Py_FinalizeEx document found here suggests it should stop all 
> interpreters: https://docs.python.org/dev/c-api/init.html
> 
> Anyone have an idea know what might be going wrong?
> 
> What code is holding on to the Python DLL?

Three and a half year later and I have the exact same problem. Curios world.
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to