Ik denk dat dat komt omdat er nog geen instantie van de class CLIPS is op het moment dat de functie meegegeven wordt aan de decorator.
2012/5/14 Schneider <f.schnei...@de-bleek.demon.nl> > Nop, doet het niet. Maar toch dank voor je suggestie.**** > > ** ** > > Frans**** > > ** ** > > *Van:* python-nl-bounces+fs=de-bleek.demon...@python.org [mailto: > python-nl-bounces+fs=de-bleek.demon...@python.org] *Namens *Tikitu de > Jager > *Verzonden:* maandag 14 mei 2012 11:49 > *Aan:* Dutch Python developers and users > *Onderwerp:* Re: [python-nl] Decorator**** > > ** ** > > Met CLIPS heb ik geen ervaring, maar je decorator doet volgens mij meer > dan echt nodig is. Ik zou zeggen:**** > > ** ** > > def clips_callable(f):**** > > clips.RegisterPythonFunction(f, f.__name__)**** > > return f**** > > ** ** > > Of dat je probleem oplost is een andere vraag...**** > > ** ** > > gr,**** > > Tikitu**** > > ** ** > > 2012/5/14 Schneider <f.schnei...@de-bleek.demon.nl>**** > > Dames, heren,**** > > **** > > Omdat ik weinig ervaring met decorators en multiprocessing heb, ben ik > opzoek naar een beetje hulp.**** > > Ik maak gebruik van CLIPS via PyClips (http://pyclips.sourceforge.net/) > waarbij CLIPS in een apart proces gestart wordt i.v.m. performance e.d. Om > Python aan te kunnen roepen vanuit CLIPS, moeten de Python functies in > CLIPS worden geregistreerd. **** > > Meest basale vorm zonder decorators.**** > > **** > > import clips**** > > import multiprocessing**** > > **** > > class *CLIPS*(object):**** > > def *__init__*(*self*, data):**** > > *self*.environment = clips.Environment()**** > > *self*.data = data**** > > clips.RegisterPythonFunction(*self*.pyprint, *"pyprint"*)**** > > *self*.environment.Load(*"test.clp"*)**** > > *self*.environment.Reset()**** > > *self*.environment.Run()**** > > def *pyprint*(*self*, value):**** > > print *self*.data, *""*.join(map(str, value))**** > > **** > > class *CLIPSProcess*(multiprocessing.Process):**** > > def *run*(*self*):**** > > p = multiprocessing.current_process()**** > > *self*.c = CLIPS(*"%s %s"* % (p.name, p.pid))**** > > pass**** > > **** > > if __name__ == *"__main__"*:**** > > cp = CLIPSProcess()**** > > cp.start()**** > > **** > > Inhoud van test.clp is:**** > > **** > > (defrule MAIN::start-me-up**** > > =>**** > > (python-call *pyprint* "Hello world")**** > > ) **** > > **** > > Output is CLIPSProcess-1 2456 Hello world**** > > Werkt goed. Nu wil ik heel wat “pyprint” achtige functies kunnen > registreren via iets als:**** > > **** > > *@clips_callable***** > > def *pyprint*(*self*, value):**** > > …**** > > **** > > zonder dat ik steeds clips.RegisterPythonFunction hoef aan te roepen. Een > simpele decorator zoals hieronder werkt niet:**** > > **** > > import clips**** > > import multiprocessing**** > > **** > > def *clips_callable*(f):**** > > from functools import wraps**** > > *@wraps*(f)**** > > def *wf*(*args, **kwargs):**** > > print *'calling {}'*.format(f.__name__)**** > > return f(*args, **kwargs)**** > > clips.RegisterPythonFunction(wf, f.__name__)**** > > return wf**** > > **** > > class *CLIPS*(object):**** > > def *__init__*(*self*, data):**** > > *self*.environment = clips.Environment()**** > > *self*.data = data**** > > #clips.RegisterPythonFunction(self.pyprint, "*pyprint*")**** > > *self*.environment.Load(*"test.clp"*)**** > > *self*.environment.Reset()**** > > *self*.environment.Run()**** > > *@clips_callable***** > > def *pyprint*(*self*, value):**** > > print *self*.data, *""*.join(map(str, value))**** > > **** > > class *CLIPSProcess*(multiprocessing.Process):**** > > def *run*(*self*):**** > > p = multiprocessing.current_process()**** > > *self*.c = CLIPS(*"%s %s"* % (p.name, p.pid))**** > > pass**** > > **** > > if __name__ == *"__main__"*:**** > > cp = CLIPSProcess()**** > > cp.start()**** > > **** > > Met als output **** > > **** > > calling pyprint**** > > **** > > De decorator doet duidelijk niet wat ik wil. Heeft iemand misschien een > oplossing?**** > > **** > > Met vriendelijke groet,**** > > **** > > Frans**** > > ** ** > > _______________________________________________ > Python-nl mailing list > Python-nl@python.org > http://mail.python.org/mailman/listinfo/python-nl > >
_______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl