[Python.NET] .NET 2 and hang with AcquireLock

Matthew Pontefract MP at credaris.com
Tue Jun 6 17:36:45 CEST 2006


Thanks for your reply Brian - I have been playing around with this a
fair bit. I checked out the source code from Subversion; the revision
from 2nd June built with no problems and so I now have a .NET 2 build
which appears to work well from the console etc.

Using this from my C# web service exhibits the same behaviour as before
however! The problem is really quite tricky because in fact it is wider
than I previously suspected: the web service will successfully acquire
the lock once or twice in a row, but will then hang at the AcquireLock
call regardless of whether a Python exception had been raised in code or
not. 

I don't think any of the C# code would have been called again (and I
kept tabs on calls to acquire and drop the lock), nor is there any
re-entrant code. 

This prompted me to change my approach to a rather more satisfactory one
anyway: I use ZSI to create a separate web service from python directly
and call that web service from my C# app. I use PythonNet because I want
to use business code available in .NET assemblies. Thanks to PythonNet
it's been a breeze to use Python in what is otherwise a very C#
environment - I'm really pleased. 

Even though I've changed tack, when I have time I'll get a debugger onto
the PythonNet code and try and trace this further - I'll post back if I
get anywhere. It would be interesting to know if it's something peculiar
to me!

For your information, as requested, the code where the problem occurred
is as follows (it's all a touch noddy - various permutations of this
were tried, so that's why the gs lock object rather bizarrely ended up
static etc...):

	public class Reporting
	{
		private static IntPtr gs;
		public static void GenerateReport(String report)
		{
			if (!PythonEngine.IsInitialized)
			{
				PythonEngine.Initialize();
				gs = PythonEngine.AcquireLock();
				try
				{
	
PythonEngine.RunSimpleString("import sys");
	
PythonEngine.RunSimpleString("sys.path.append('g:/pyccolo')");
	
PythonEngine.RunSimpleString("from report.server_init import *");
	
PythonEngine.RunSimpleString("print(sys.path)");
	
PythonEngine.RunSimpleString("o.flush()");
				}
				finally
				{
					PythonEngine.ReleaseLock(gs);
				}
			}

			gs = PythonEngine.AcquireLock();
			try
			{
	
PythonEngine.RunSimpleString("runReport('"+report+"')");
	
PythonEngine.RunSimpleString("o.flush()");
			}
			finally
			{
				PythonEngine.ReleaseLock(gs);
			}
		}	
	}

Regards
Matthew

-----Original Message-----
From: Brian Lloyd [mailto:Brian.Lloyd at revolution.com] 
Sent: 06 June 2006 14:24
To: Matthew Pontefract; pythondotnet at python.org
Subject: RE: [Python.NET] .NET 2 and hang with AcquireLock

Hi Matthew - 

This is a tough kind of problem to debug through email ;)

Is there any chance that the exceptions you raise cause any 
of your C# to be called again? 

If not, if there is any way you can distill your code to a 
relatively small example that demonstrates the problem, send 
it to me and I'll take a look.

-Brian

> -----Original Message-----
> From: pythondotnet-bounces at python.org 
> [mailto:pythondotnet-bounces at python.org] On Behalf Of Matthew 
> Pontefract
> Sent: Tuesday, June 06, 2006 6:08 AM
> To: pythondotnet at python.org
> Subject: [Python.NET] .NET 2 and hang with AcquireLock
> 
>  
> 
> Hello
> 
> 
> I have a question pertaining to running Python NET under .NET 
> version 2 which, admittedly, is not the version for which the 
> packages are built.
> 
>  
> 
> All works just fine - I am using the PythonEngine inside a 
> web service, acquiring the GIL before operations, releasing 
> it in a 'finally' block afterwards. This is fine provided no 
> python exceptions are raised in the Python code. Even though 
> the GIL is released in the C#, a subsequent call to 
> AcquireLock will hang as if waiting for it to be released. No 
> calls to acquirelock have been made between the last call to 
> release the GIL and the call that hangs.
> 
> 
> Has anyone else had this problem?
> 
>  
> 
> I am using Python 2.4
> 
>  
> 
> Regards
> 
> Matthew
> 
>  
> 
> Dr Matthew Pontefract
> 
> Credaris Portfolio Management 
> 
> ________________________________________
> 
>  
> 
> mp at credaris.com
> 
> T : (44) 207 925 8365
> 
> F : (44) 207 925 8399
> 
>  
> 
> CPM Advisers Limited
> 
> Norfolk House
> 
> 30 Charles II Street
> 
> London
> 
> SW1Y 4AE
> 
> www.credaris.com
> 
>  
> 
> Regulated by the Financial Services Authority
> 
>  
> 
> 


http://www.credaris.com/disclaimer.php



More information about the PythonDotNet mailing list