Continually check object status

Discussion in 'Python' started by futileissue, Aug 2, 2008.

  1. futileissue

    futileissue Guest

    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.
     
    futileissue, Aug 2, 2008
    #1
    1. Advertisements

  2. futileissue

    Gary Herron Guest

    To answer your question, we need to know from where you would derive the
    directions to change the status. For instance:
    * time based (random or periodically scheduled)
    * user mouse/keyboard action
    * some state external to the program (file content, socket data, phase
    of the moon, price of tea in China, ...)

    Each of those possibilities would require a substantially different
    approach.

    Gary Herron
     
    Gary Herron, Aug 2, 2008
    #2
    1. Advertisements

  3. 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
     
    Diez B. Roggisch, Aug 2, 2008
    #3
  4. futileissue

    futileissue Guest

    I was thinking about it taking directions from a GTK event handler,
    such as a user selecting a button.
     
    futileissue, Aug 2, 2008
    #4
  5. futileissue

    futileissue Guest

    I was afraid that someone was going to mention threading. I have read
    about it before but not been able to do much with it.

    My ultimate goal is to create some sort of tamagotchi style virtual
    pet to interact with. Over time it gets hungry or bored, but the
    process can be fixed by a user "feeding" or "playing with" it. I
    wanted to take this opportunity to teach myself some PyGTK coding as
    well, but I thought that maybe I could build the creature object and
    looping in such a way that it would be possible to add a GUI to it
    later.
     
    futileissue, Aug 2, 2008
    #5
  6. No, that's not possible. But when you use GTK, there are timer-functions
    that let you register a timer event which will then invoke a callback in
    which you can check whatever status you like.

    Diez
     
    Diez B. Roggisch, Aug 2, 2008
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.