I have extended threading.Thread - my idea is to do something like this:
class StateManager(threading.Thread):
    def run(self, lock, state):
        while True:
            lock.acquire()
            self.updateState(state)
            lock.release()
            time.sleep(60)
I need to be able to pass reference to my "state" object and eventually to a lock (I'm quite new to multi-threading and still confused about the necessity of locking in Python). What is the proper way to do it?
pass them in the constructor, e.g.
class StateManager(threading.Thread):
    def __init__(self, lock, state):
        threading.Thread.__init__(self)
        self.lock = lock
        self.state = state            
    def run(self):
        lock = self.lock
        state = self.state
        while True:
            lock.acquire()
            self.updateState(state)
            lock.release()
            time.sleep(60)
                        I'd say that it's easier to keep the threading part away from the StateManager object:
import threading
import time
class StateManager(object):
    def __init__(self, lock, state):
        self.lock = lock
        self.state = state
    def run(self):
        lock = self.lock
        state = self.state
        while True:
            with lock:
                self.updateState(state)
                time.sleep(60)
lock = threading.Lock()
state = {}
manager = StateManager(lock, state)
thread = threading.Thread(target=manager.run)
thread.start()
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With