Jawel class CLIPSClass(object): callables = []
@classmethod class CLIPS(CLIPSClass): @clipsCallable def pyprint(self, value): self.data, "".join(map(str, value)) 2012/5/14 Schneider <f.schnei...@de-bleek.demon.nl> > Dat zou best wel eens kunnen. Dat zou betekenen dat iets met @.... > helemaal niet gaat?**** > > ** ** > > Frans**** > > ** ** > > *Van:* python-nl-bounces+fs=de-bleek.demon...@python.org [mailto: > python-nl-bounces+fs=de-bleek.demon...@python.org] *Namens *Dexter > *Verzonden:* maandag 14 mei 2012 12:59 > > *Aan:* Dutch Python developers and users > *Onderwerp:* Re: [python-nl] Decorator**** > > ** ** > > 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 > >
_______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl