[IronPython] Making asynchronous calls in IronPython

Schmottlach, Glenn glenn.schmottlach at harman.com
Mon May 4 14:58:23 PDT 2009


Okay, call me clueless . . .

This is what I have so far as an example:

import clr
clr.AddReference('IronPython')

from System import *
from System.Threading import Thread
from IronPython.Compiler import CallTarget0
	
class Foo:
    def start(self):
        print 'Started.'
        Thread.Sleep(3000)
        threadId = System.Threading.Thread.CurrentThread
        return 'Exiting thread %r' % (threadId)

    def finish(self, r):
        print 'Finished.'

	
if __name__ == '__main__':
	f = Foo()
	caller = CallTarget0(f.start)
	result = caller.BeginInvoke(None, None)
	caller.EndInvoke(result)


Can you give me a concrete example of using CallTarget0 and
AsyncCallback to implement this? What it does now is print:

Finished.
SystemError:Object reference not set to an instance of an object.

Obviously, I'm not using AsyncCallback because it's not clear to me what
I pass to the constructor and where I pass the subsequent object.

If you could spare me a few moments and correct this simple sample it
would be very grateful.

Thanks . . .


-----Original Message-----
From: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
Sent: Monday, May 04, 2009 5:48 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Making asynchronous calls in IronPython

Schmottlach, Glenn wrote:
> I've looked at the C# examples in MSDN but they don't appear to lend
> themselves (at least with my limited experience in .NET) to an easy
> implementation in IronPython due to the dynamic nature of the type
> system in Python.
>
> The example I looked at:
>
> http://msdn.microsoft.com/en-us/library/h80ttd5f.aspx
>
>
> declares a delegate type which seems difficult to do in IronPython,
e.g.
>
> C#
>
> public delegate bool AsyncFactorCaller (
>              int number, 
>              ref int primefactor1,
>              ref int primefactor2);
>
> So what's the equivalent in IronPython?
>
> Also, (out) parameters are passed by reference to BeginInvoke and
> EndInvoke and it's not clear to me how to handle this in IronPython. 
>
> So, I suspect I'm missing something in order to get things working.
What
> I really need to see is a concrete IronPython example and I think
things
> would gel at that point. Could you offer such an example . . . Google
> hasn't been helpful in this respect.
>   

out parameters are handled by IronPython as extra return values - you 
wrap your callback function in CallTarget0 and an AsyncCallback.

I hope this helps.

Michael

>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com
> [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Monday, May 04, 2009 4:33 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Making asynchronous calls in IronPython
>
> Schmottlach, Glenn wrote:
>   
>> Although I'm very comfortable with CPython, I'm new to IronPython and

>> the .NET framework. What I am looking for is sample code that shows 
>> how to issue an asynchronous call from IronPython using the 
>> BeginInvoke/EndInvoke mechanism of .NET.
>>
>>     
>
> I can't remember the usage off the top of my head - but usage from 
> IronPython is identical to usage from C#, so an MSDN example ought to 
> give you what you need.
>
> All the best,
>
> Michael
>   
>> Currently, I'm playing around with GTK# and a D-Bus .NET 
>> implementation (NDesk-DBus) that only provides synchronous proxy 
>> methods for D-Bus services. I believe (please correct me if I'm
wrong)
>>     
>
>   
>> that I should be able to use the BeginInvoke/EndInvoke mechanism to 
>> issue these blocking proxy requests asynchronously and be notified 
>> (via a callback) when the method has completed.
>>
>> My blocking proxy calls look something like this:
>>
>> ret = /self/._proxy.TunerGetCurrentWaveBand(0)
>>
>> where 'ret' returns the current waveband (AM, FM, etc..) and are 
>> called from a button "clicked" delegate. I would rather not block the

>> GTK# dispatch loop while waiting for the reply from the service. Can 
>> someone offer me any advice or provide a reference to sample code
that
>>     
>
>   
>> illustrates the basic concept from IronPython?
>>
>>
>>     
>
------------------------------------------------------------------------
>   
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>   
>>     
>
>
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog


_______________________________________________
Users mailing list
Users at lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



More information about the Users mailing list