多线程与多处理

时间:2012-02-02 00:01:52

标签: python multithreading wxpython multiprocessing

我目前有一个触发此按钮的按钮:

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 gui吗?

2 个答案:

答案 0 :(得分:3)

而不是“while 1”,为什么不替换一些开始为“true”的变量,并且可以更改为“false”(表示线程退出)。

当然,这假设您不断循环(并且不会以“chat。*”方式阻止,或者等待“sleep()”)。

答案 1 :(得分:2)

你可以尝试这样的事情,我自己做了。

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)

这显然是一个粗略的例子,但是你创建了一个在线程中阻塞的队列。您可以随时启动该线程并运行它。等你触发它或停止它。