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.<br><br><div class="gmail_quote">2012/5/14 Schneider <span dir="ltr">&lt;<a href="mailto:f.schneider@de-bleek.demon.nl" target="_blank">f.schneider@de-bleek.demon.nl</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="NL" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Nop, doet het niet.  Maar toch dank voor je suggestie.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Frans<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">Van:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> python-nl-bounces+fs=<a href="mailto:de-bleek.demon.nl@python.org" target="_blank">de-bleek.demon.nl@python.org</a> [mailto:<a href="mailto:python-nl-bounces%2Bfs" target="_blank">python-nl-bounces+fs</a>=<a href="mailto:de-bleek.demon.nl@python.org" target="_blank">de-bleek.demon.nl@python.org</a>] <b>Namens </b>Tikitu de Jager<br>
<b>Verzonden:</b> maandag 14 mei 2012 11:49<br><b>Aan:</b> Dutch Python developers and users<br><b>Onderwerp:</b> Re: [python-nl] Decorator<u></u><u></u></span></p></div><div><div class="h5"><p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Met CLIPS heb ik geen ervaring, maar je decorator doet volgens mij meer dan echt nodig is. Ik zou zeggen:<u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">
    def clips_callable(f):<u></u><u></u></p></div><div><p class="MsoNormal">        clips.RegisterPythonFunction(f, f.__name__)<u></u><u></u></p></div><div><p class="MsoNormal">        return f<u></u><u></u></p></div><div>
<p class="MsoNormal"><u></u> <u></u></p></div><div><div><p class="MsoNormal">Of dat je probleem oplost is een andere vraag...<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">
gr,<u></u><u></u></p></div><div><p class="MsoNormal">Tikitu<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">2012/5/14 Schneider &lt;<a href="mailto:f.schneider@de-bleek.demon.nl" target="_blank">f.schneider@de-bleek.demon.nl</a>&gt;<u></u><u></u></p>
<div><div><p class="MsoNormal">Dames, heren,<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Omdat ik weinig ervaring met decorators en multiprocessing heb, ben ik opzoek naar een beetje hulp.<u></u><u></u></p>
<p class="MsoNormal">Ik maak gebruik van CLIPS via PyClips (<a href="http://pyclips.sourceforge.net/" target="_blank">http://pyclips.sourceforge.net/</a>) 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. <u></u><u></u></p>
<p class="MsoNormal">Meest basale vorm zonder decorators.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">import</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> clips</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">import</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> multiprocessing</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">class</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> <b>CLIPS</b>(object):</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>__init__</b>(<i>self</i>, data):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment = clips.Environment()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.data = data</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        clips.RegisterPythonFunction(<i>self</i>.pyprint, <i><span style="color:#00aa00">&quot;<u>pyprint</u>&quot;</span></i>)</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment.Load(<i><span style="color:#00aa00">&quot;test.clp&quot;</span></i>)</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment.Reset()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment.Run()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>pyprint</b>(<i>self</i>, value):</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <span style="color:blue">print</span> <i>self</i>.data, <i><span style="color:#00aa00">&quot;&quot;</span></i>.join(map(str, value))</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">class</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> <b>CLIPSProcess</b>(multiprocessing.Process):</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>run</b>(<i>self</i>):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        p = multiprocessing.current_process()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.c = CLIPS(<i><span style="color:#00aa00">&quot;%s %s&quot;</span></i> % (<a href="http://p.name" target="_blank">p.name</a>, p.pid))</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        </span><span style="font-size:10.0pt;font-family:Consolas;color:blue">pass</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">if</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> __name__ == <i><span style="color:#00aa00">&quot;__main__&quot;</span></i>:</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    </span><span style="font-size:10.0pt;font-family:Consolas">cp = CLIPSProcess()</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas">    cp.start()</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> </span><u></u><u></u></p>
<p class="MsoNormal">Inhoud van test.clp is:<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">(defrule MAIN::start-me-up</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">       =&gt;</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">       (python-call <u>pyprint</u> &quot;Hello world&quot;)</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas">)                       </span><u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Output is <span style="font-size:10.0pt;font-family:Consolas">CLIPSProcess-1 2456 Hello world</span><u></u><u></u></p>
<p class="MsoNormal">Werkt goed. Nu wil ik heel wat “pyprint” achtige functies kunnen registreren via iets als:<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas">    </span><i><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:#7d7d7d">@<u>clips_callable</u></span></i><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>pyprint</b>(<i>self</i>, value):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span style="font-size:10.0pt;font-family:Consolas">        <span style="color:blue">…</span></span><u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">zonder dat ik steeds clips.RegisterPythonFunction hoef aan te roepen. Een simpele decorator zoals hieronder werkt niet:<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">import</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> clips</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">import</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> multiprocessing</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">def</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> <b>clips_callable</b>(f):</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    </span><span style="font-size:10.0pt;font-family:Consolas;color:blue">from</span><span style="font-size:10.0pt;font-family:Consolas"> functools <span style="color:blue">import</span> wraps</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas">    <i><span style="color:#7d7d7d">@wraps</span></i>(f)</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>wf</b>(*args, **kwargs):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas">        </span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">print</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> <i><span style="color:#00aa00">&#39;calling {}&#39;</span></i>.format(f.__name__)</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <span style="color:blue">return</span> f(*args, **kwargs)</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    clips.RegisterPythonFunction(wf, f.__name__)</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">return</span> wf</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">class</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> <b>CLIPS</b>(object):</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>__init__</b>(<i>self</i>, data):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment = clips.Environment()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.data = data</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <span style="color:#804040">#clips.RegisterPythonFunction(self.pyprint, &quot;<u>pyprint</u>&quot;)</span></span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment.Load(<i><span style="color:#00aa00">&quot;test.clp&quot;</span></i>)</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment.Reset()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.environment.Run()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <i><span style="color:#7d7d7d">@clips_callable</span></i></span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>pyprint</b>(<i>self</i>, value):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <span style="color:blue">print</span> <i>self</i>.data, <i><span style="color:#00aa00">&quot;&quot;</span></i>.join(map(str, value))</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">class</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> <b>CLIPSProcess</b>(multiprocessing.Process):</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    <span style="color:blue">def</span> <b>run</b>(<i>self</i>):</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        p = multiprocessing.current_process()</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <i>self</i>.c = CLIPS(<i><span style="color:#00aa00">&quot;%s %s&quot;</span></i> % (<a href="http://p.name" target="_blank">p.name</a>, p.pid))</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">        <span style="color:blue">pass</span></span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none">
<span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:blue">if</span><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas"> __name__ == <i><span style="color:#00aa00">&quot;__main__&quot;</span></i>:</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    cp = CLIPSProcess()</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">    </span><span style="font-size:10.0pt;font-family:Consolas">cp.start()</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Met als output <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas">calling pyprint</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">De decorator doet duidelijk niet wat ik wil. Heeft iemand misschien een oplossing?<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">
Met vriendelijke groet,<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Frans<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></div></div></div></div><br>_______________________________________________<br>

Python-nl mailing list<br>
<a href="mailto:Python-nl@python.org">Python-nl@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-nl" target="_blank">http://mail.python.org/mailman/listinfo/python-nl</a><br>
<br></blockquote></div><br>