Continually check object status

Diez B. Roggisch deets at nospam.web.de
Sat Aug 2 19:05:53 CEST 2008


futileissue at gmail.com schrieb:
> Beginner, so please bare with me.  I'm not sure what to call what it
> is I'm looking for.
> 
> If I have an object class, let's call it "Creature":
> 
> class Creature:
>     def __init__(self, status):
>         self.status = "happy"
> 
>     def change_status(self, new_status):
>         self.status = new_status
> 
>     def print_status(self):
>         print self.status
> 
> I would like to be able to print out the Creature's status every 20
> seconds.  Let's say I use a script like this:
> 
> import time
> while True:
>     time.sleep(20)
>     Creature.print_status()
> 
> But, while cycling through printing the status, I would like to be
> able to update Creature.status to something new.
> 
> I might be approaching this from the wrong direction entirely.  Thanks
> for your input.

The "simple", yet possibly dangerous answer is: you need 
multi-threading. Multi-threading is a technique that allows several 
(quasi)-parallel paths of execution whilst sharing memory and objects 
inside that memory. The module in python to achieve this is called 
"threading".

However, concurrent programming is a very advanced topic, ridded with 
pitfalls for even experienced developers.

There are other ways to solve the problem, commonly known as event-loops 
and timers. These are usually part of frameworks for e.g GUI-creation an 
such, but you can also roll your own if you like.

So, the better answer might be a question: what do you ultimately want 
to achieve? Given the name of your class, Creature, I assume you are 
writing on some game or such. Depending on how you plan to do that, you 
might have a framwork providing you with the needed tools/library calls 
or whatever.

Diez



More information about the Python-list mailing list