[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