Nxt-python-threads
Back to Robotics Main Page
Thread Basics
- Computing device - CPU, RAM, persistant store (two ARM CPUs, etc. in the NXT)
- Stored program; Fetch, decode, execute
- Execution context - instructions, data, program counter, stack
- Processes have all 4 (instructions, data, program counter, stack)
- Threads have PC and stack with shared ins and data
- Workshop analogy
- Concurrency and locking
- Issues and how they can be addressed
- Race conditions
- Deadlock
Basics of threads in Python
Modules
- thread - low level thread library
- threading - higher level library built on thread (addressed on this page)
Thread Objects
When creating a thread, you will must always define a class function called run(). This is the code that will be executed by the thread. When the run() function exits, the thread is no longer alive.
import threading
class hello_world_thread( threading.Thread ):
def run( self ):
print "Hello World!"
Starting the above thread is done by calling the start() function. This will execute the run() function you've defined.
>>> hw = hello_world_thread() # initialize >>> hw.start() # run Hello World!
If you want to pass arguments to the thread at initialization, define the constructor function: __init__().
class hello_world_thread( threading.Thread ):
def __init__( self, message="Hello World" ): # default value for message
threading.Thread.__init__( self ) # init the thread
self.message = message
def run( self ):
print self.message
>>> hello_world_thread().start() # initialize and run Hello World!
>>> hello_world_thread('Hola Mundo!").start() # init and run with argument
Hola Mundo!
Lock Objects
Condition Objects
Semaphore Objects
Event Objects
Timer Objects