Возврат к методу Thread после вызова метода difnet - PullRequest
0 голосов
/ 19 января 2012

Я не уверен, лучший способ спросить это (отсюда и дрянное название). В методе run() подкласса threading.Thread у меня есть цикл inf, который также должен быть возвращен после запуска различных методов. Как это достигается? Вот что у меня есть (нужно ли RLock() s вокруг plist объекта в том же экземпляре Thread?)

class pMonitor(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.plist = []

    def run(self):
        while True:
            for p in self.plist:
                if not p.isRunning():
                    p.run()
            time.sleep(1)

    def addproc(self, cmdline):
        self.plist.append(Proc(cmdline))

При вызове addproc как мне вернуться к циклу внутри run()? (или как это должно быть написано с тем же эффектом?)

1 Ответ

1 голос
/ 19 января 2012

Вы можете использовать Queue.Queue:

def runproc(queue):
    plist = []
    while True:
        try: cmdline = queue.get_nowait()
        except Empty: pass
        else: plist.append(Proc(cmdline))

        for p in plist:
            if not p.isRunning():
               p.run()
        time.sleep(1)

queue = Queue()            
t = Thread(target=runproc, args=(queue,))
t.daemon = True
t.start()

queue.put(cmdline)
# ...

Вам необходимо добавить логику, которая удаляет процессы из plist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...