Seite 1 von 1

loop

Verfasst: Freitag 26. Januar 2007, 16:10
von gorba
hallo

ich habe eine mbus instanz, die am ende eines Beispiels mittels

Code: Alles auswählen

mbus.loop() 
geloopt wird. Wenn ich nun aber ein GUI haben möchte, muss ich doch auch z.B.

Code: Alles auswählen

root=Tk()
root.title("blabla")
my_class = MyClass(root)
my_class.setModemAdresses(conf)
GUIFD = my_class
root.mainloop()
aufrufen. Verträgt sich das?

Re: loop

Verfasst: Freitag 26. Januar 2007, 17:19
von Leonidas
gorba hat geschrieben:Verträgt sich das?
Sofern du mbus ( :?: dbus :?: ) in einem eigenen Thread startest, sollte das gehen.

Verfasst: Montag 29. Januar 2007, 11:36
von gorba
ok.

Wie muss ich das den anstellen? Mein mbus code sieht bisher so aus:

Code: Alles auswählen

from mbus import entity
from mbus import types
from mbus import guides

import logging

import notifier

def rel_one( adr, val, data = None ):
	pass

def rpc_sum( adr, val, data = None ):
    print "rpc_sum: incoming call from:",adr
    print "building sum of:", val
    res = 0
    for i in val: res += i
#    return None
#    raise guides.RPCException( "failed" )
    return guides.RPCReturn( [ res ],
    	descr = "the sum was calculated successfully" )

def newEntity( maddr ):
    print "New Entity:", str( maddr )

def lostEntity( maddr ):
    print "Lost Entity:", str( maddr )

def unknown( mmessage ):
    print "received unknown message:"
    print mmessage

def transporterror( e ):
    print "Mbus transport error occured:", e

# logging
logging.getLogger().addHandler( logging.StreamHandler() )
#logging.getLogger().setLevel( logging.DEBUG )

# init notifier
notifier.init( notifier.GENERIC )

# create mbus entity
mbus = guides.Instance( "name:rpcsvr type:test lang:python" )

# register special callbacks (optional)
mbus.newEntityFunction      = newEntity
mbus.lostEntityFunction     = lostEntity
mbus.unknownMessageFunction = unknown
mbus.errorFunction          = transporterror

mbus.addRPCCallback( "math.sum", rpc_sum )
mbus.addRPCCallback( "releas.one", rel_one )

try:
    mbus.loop()
#except TypeError, e:
#    print e
except types.MError, e:
    print e.descr
    print e.mmsg
except KeyboardInterrupt:
    pass
Muss ich nun:


# create mbus entity
mbus = guides.Instance( "name:rpcsvr type:test lang:python" )

und
mbus.loop()

in einem separaten thread laufen lassen? Funktionieren danach meine callback funktionen noch?

Verfasst: Montag 29. Januar 2007, 12:03
von BlackJack
In `rpc_sum()` könntest Du die `sum()`-Funktion verwenden.

Code: Alles auswählen

In [7]: sum([42, 23, 666])
Out[7]: 731

Verfasst: Montag 29. Januar 2007, 12:20
von gorba
danke für den tipp. Wie kann ich in Python Threads erzeugen? Und code bestimmten threads zuweisen?

ps: hatt sich erledigt. Habe die thread.start_new_thread() funktion verwendet. Thx