module cwiid and threading: how to use cwiid.Wiimote without blocking

News123 news123 at free.fr
Tue Nov 11 16:15:53 EST 2008


The only solution, that I found was recompiling the libcwiid wrapper,
such that it allows threading (the patch existed already on the libcwiid
Trac data base, though it's not part of an official release)


bye


N

News123 wrote:
> Hi,
> 
> I'm using the module cwiid to conncet to a wiimote.
> 
> import cwiid
> wiimote = cwiid.Wiimote()
> 
> This function is blocking:
> It waits until it could sucessfully connect to a device or
> until 20 seconds passed without sucessful connection.
> 
> As I wanted to do some things even if the wii-mote is not
> connected I though about creating  a thread, which tries connecting
> until it is sucessfully connected
> and let the application do something else meanwhile.
> 
> Unfortunately it seems, that the call to cwiid.Wiimote() blocks
> all threads.
> Probably the call to Wiimote() doesn't release the GIL.
> 
> 
> So my question:
> 
> Is there anybody knowing if there's any trick in python or
> in libcwiid  to avoid this 'complete block'
> 
> The only idea, that I have is to do the polling in a second process.
> I'm just not sure though how I could pass the sucessfully connected
> device to the parent process without creating pipes or
> 
> thanks for any ideas and bye
> 
> N
> 
> P.S. Attached a test script and its output:
> 
> #[code]
> import os,sys,time,threading,cwiid
> class wii_thread(threading.Thread):
>     def run(self):
>         wm = None
>         while not wm:
>             try:
>                 print "try to connect"
>                 wm=cwiid.Wiimote()
>             except:
>                 print "Didn't find wiimote will retry"
>                 time.sleep(0.5)
>         print "setup wiimote,poll and queue wii events"
>         time.sleep(1000)
> if __name__ == '__main__':
>     wii_thrd = wii_thread()
>     wii_thrd.start()
>     while True:
>         print 'do something'
>         time.sleep(1)
> #[code end]
> 
> # the output
> ##################
> do something
> try to connect
> No wiimotes found
> Didn't find wiimote will retry
> do something
> try to connect
> setup wiimote,poll and queue wii events
> do something
> do something
> do something
> Traceback (most recent call last):
>   File "./threadprob.py", line 22, in <module>
>     time.sleep(1)
> KeyboardInterrupt
> 
> 



More information about the Python-list mailing list