Многопоточность против многопроцессорности - PullRequest
0 голосов
/ 02 февраля 2012

У меня в настоящее время есть кнопка, которая вызывает это:

def spam(self,event):
        t = workingthread()
        t.start()

Что идет к этому:

class workingthread(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)

        def run(self):
               while 1:
                       chat = skype.CreateChatWith(name)
                       chat.SendMessage(message)
                       time.sleep(timeou)

Я пытаюсь, чтобы это было переключено, но я слышал, что нетспособ остановить потоки, и я не хочу использовать многопроцессорность.Любые другие способы, которыми я мог заставить это работать, не отставая от графического интерфейса wx?

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Вместо «while 1», почему бы не заменить некоторую переменную, которая начинает «true», и вы можете изменить ее на «false» (сигнализируя потоку о выходе).

Это предполагает, конечно, что вы постоянно зацикливаетесь (и не блокируетесь в методе "chat. *", Или ожидаете в "sleep ()").

2 голосов
/ 02 февраля 2012

Вы можете попробовать что-то вроде этого, что я сделал сам.

from Queue import Queue
import threading

class workingthread(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)
        self._queue = Queue()

    def run(self):
        while True:

            item = self._queue.get(block=True)
            if item is None:
                return

            name, message = item
            chat = skype.CreateChatWith(name)
            chat.SendMessage(message)

    def processOne(self, data):
        self._queue.put_nowait(data)

    def stop(self):
        self._queue.put(None)

Это грубый пример, очевидно, но вы создаете очередь, которая блокируется в потоке. Вы запускаете поток, когда хотите, и он запускается. Он ждет, когда вы запустите или остановите его.

...