[IronPython] Query regarding Proxy Object lease period

mohammad mustaq mustaq2001 at gmail.com
Thu Aug 12 05:41:51 CEST 2010


Yes, IronPython 2.6 returns null whereas 2.0 does not. I will have to use
2.6 going ahead. Thanks for the assistance. I appreciate your quick
response.

Mustaq

On Thu, Aug 12, 2010 at 8:21 AM, Dino Viehland <dinov at microsoft.com> wrote:

>  Yep – ScriptScope.InitializeLifetimeService now returns null in 2.6.  And
> doing the same in MbrBase will make it stay alive forever as well.
>
>
>
> *From:* users-bounces at lists.ironpython.com [mailto:
> users-bounces at lists.ironpython.com] *On Behalf Of *mohammad mustaq
> *Sent:* Wednesday, August 11, 2010 7:25 PM
>
> *To:* Discussion of IronPython
> *Subject:* Re: [IronPython] Query regarding Proxy Object lease period
>
>
>
>
> I am using IronPython 2.0.When you said ScriptScope is returning null did
> you mean ScriptScope.InitializeLifetimeService() is returning null. So do
> you mean to say that overriding "InitializeLifetimeService" in MbrBase is
> sufficient to keep the hosting API objects alive.
>
> On Wed, Aug 11, 2010 at 10:26 PM, Dino Viehland <dinov at microsoft.com>
> wrote:
>
> What version of IronPython are you using?  When I try this against 2.6.1
> ScriptScope is “properly” returning null.    I would recommend seeing how
> the lifetime issue stacks up w/ everything returning null.    I think long
> term we need to provide an API that lets you provide the sponsors for
> hosting API objects but until we do that leasing your own objects may be
> futile unless there a whole lot of them in comparison to the hosting API
> objects.  I actually  haven’t done the leasing stuff myself either so I’m
> not sure I can quickly cook up an example.
>
>
>
> *From:* users-bounces at lists.ironpython.com [mailto:
> users-bounces at lists.ironpython.com] *On Behalf Of *mohammad mustaq
> *Sent:* Wednesday, August 11, 2010 7:30 AM
> *To:* Discussion of IronPython
> *Subject:* Re: [IronPython] Query regarding Proxy Object lease period
>
>
>
>
> I did override "InitializeLifetimeService" in MbrBase to return null. But
> in my example the "scope" object dies at first instance, so how would
> overriding "InitializeLifetimeService" in MbrBase help. Could you please
> modify my code to illustrate the right usage of ISponsor on the client side.
>
>
> My application will create objects periodically in the appdomain and
> execute methods implemented in IronPython. These methods may take around 20
> minutes to execute. The whole application may run for a day or more. So I
> need to take this into consideration while implementing the lifetime
> service.
>
> I needed to confirm one thing. Do i need to provide the lease period for
> all objects created in the Appdomain. As per the code given below do i need
> to provide the lease period for "code","scope","mbr","script", "ops" etc.
> Or is it only based on how long I expect the object to be alive.
>
> I am new to this concept of Appdomain hence my questions may sound silly.
>
> On Tue, Aug 10, 2010 at 10:15 PM, Dino Viehland <dinov at microsoft.com>
> wrote:
>
> The trick to keeping an object alive isn’t to call
> InitializeLifetimeService yourself but instead to return an appropriate
> lease.  For example if you overrode InitializeLifetimeService in MbrBase to
> always return null your object will be kept alive forever.  That will work
> fine as long as the app domain isn’t living for an extremely long time or
> that you have a limited number of these MBROs that you’re creating in the
> app domain.
>
>
>
> We still have this problem to solve in the DLR as well where we’re still
> returning null.  I think  the correct solution is that we need to use
> ISponsor’s (ClientSPonsor provides an implementation of this) on the client
> side and then call ILease.Register so the object can call back to your
> sponser.
>
>
>
> *From:* users-bounces at lists.ironpython.com [mailto:
> users-bounces at lists.ironpython.com] *On Behalf Of *mohammad mustaq
> *Sent:* Tuesday, August 10, 2010 6:43 AM
> *To:* Discussion of IronPython
> *Subject:* [IronPython] Query regarding Proxy Object lease period
>
>
>
>
>
> Hi,
>
> I posted this last week and I did not get a response.Hence posting it
> again.
>
> I have an application that creates a python engine in a new appdomain. If I
> do not specify a lease period I see that the objects are disconnected when I
> leave it idle for a period of 5 minutes. I used "InitializeLifetimeService"
> to keep the object alive forever but it did not work. The "dlr-spec-hosting"
> document mentions the following in page 93 under "Current Issues" section :
> "Currently if you do not use a host for 15 min, it dies, and you lose your
> data. We've added InitializeLifetimeService on objects to cause them to stay
> alive forever, but we need to think through the design and the host controls
> here". Currently I renew the object using "ILease". I do not know if this is
> the right thing to do. Could you please suggest me the right way to deal
> with this issue. I have provided the code below for your reference.
>
> Thanks,
> Mustaq
>
> using System;
> using Microsoft.Scripting;
> using IronPython.Hosting;
> using Microsoft.Scripting.Hosting;
> using System.Runtime.Remoting;
> using System.Runtime.Remoting.Lifetime;
>
> class Foo
> {
>     public static void Main(string[] args)
>     {
>         AppDomain ad = AppDomain.CreateDomain("foo");
>         ScriptEngine engine = Python.CreateEngine(ad);
>         engine.Runtime.LoadAssembly(typeof(MbrBase).Assembly);
>
>         ScriptSource code = engine.CreateScriptSourceFromString(@"
> import MbrBase
> class C(MbrBase):
>     def Test_C(self, log):
>         print 0
> a = C()
> ", SourceCodeKind.Statements);
>
>         ScriptScope scope = engine.CreateScope();
>         ILease lifeTime = (ILease)scope.InitializeLifetimeService(); // Is
> this supposed to keep the object alive forever.
>
>         lifeTime.Renew(TimeSpan.FromDays(1)); // Provided a lease for one
> day.
>         code.Execute(scope);  // If the above lease is not mentioned then
> execution fails on this line after being inactive for 5 minutes.
>
>         Console.WriteLine("Trying to do it... {0}",
> AppDomain.CurrentDomain.Id);
>         MbrBase mbr = (MbrBase)scope.GetVariable("a");
>
>         string isSubClassCode = String.Format("issubclass({0},{1})", "C",
> "MbrBase");
>         ScriptSource script =
> engine.CreateScriptSourceFromString(isSubClassCode,
> SourceCodeKind.Expression);
>         bool result = (bool)script.Execute(scope);
>
>         if (result == true)
>         {
>             ObjectOperations ops = engine.Operations;
>             ObjectHandle subClass = scope.GetVariableHandle("C");    // get
> back a handle
>             ObjectHandle instance = ops.Call(subClass, new
> ObjectHandle[0]);  // invoke the handle to create an instance
>             mbr = instance.Unwrap() as MbrBase;  // now we know we have an
> MBR and we can unwrap it to our local side
>
>             ObjectHandle temp = ops.GetMember(instance, "Test_C");
>             object log = null;
>             ops.Call(temp, log);
>         }
>
>         mbr.DoItVirtually();
>         mbr.DoIt();
>         Console.ReadKey();
>     }
> }
>
> public class MbrBase : MarshalByRefObject
> {
>     public virtual void DoItVirtually()
>     {
>         Console.WriteLine("Did it virtually {0}",
> AppDomain.CurrentDomain.Id);
>     }
>
>     public void DoIt()
>     {
>         Console.WriteLine("Did it {0}", AppDomain.CurrentDomain.Id);
>     }
> }
>
>
>
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20100812/107d3bd0/attachment.html>


More information about the Ironpython-users mailing list