Как управлять процессом подпотока в python? - PullRequest
1 голос
/ 15 марта 2010

Код первый:

'''this is main structure of my program'''

from twisted.web import http
from twisted.protocols import basic
import threading

threadstop = False    #thread trigger,to be done
class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        while True:
            if threadstop:
                return
            dosomething()


'''def some function'''

if __name__ == '__main__':
    from twisted.internet import reactor
    t = MyThread()
    reactor.listenTCP(serverport,myHttpFactory())
    reactor.run()

Как моя первая многопоточная программа, я счастлив, что она работает как положено. Но теперь я обнаружил, что не могу это контролировать. Если я запускаю его спереди, Control + C может остановить только основной процесс, и я все еще могу найти его в списке процессов; если я запускаю его в фоновом режиме, я должен использовать kill -9 pid, чтобы остановить его. И мне интересно, есть ли способ управления процессом подпотока с помощью триггерной переменной или лучший способ остановить весь процесс, кроме kill -9.

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

Это не прямой ответ на ваш вопрос, и Алекс уже ответил на ваш вопрос, но вот мысль.

Я вижу, что вы используете Python threading. Вы пытались использовать twisted.internet.threads?

Когда я обнаруживаю, что использую потоки в приложении twisted, я перехожу на twisted.internet.threads

2 голосов
/ 15 марта 2010

Используйте модуль atexit , чтобы зарегистрировать (в главном потоке) функцию, которая задает для глобального threadstop значение True, или, проще, установить атрибут daemon объекта потока на True, поэтому процесс не будет поддерживаться, если основной поток завершится.

...