../chu-tan-bing-fa

初探并发

很好,最近的一个小作业让我游行接触到真正有意义的并发编程。

Demo

于是使用 python 的queuesignal还有time模块做了一个不算真正多线程的示意用的小小 demo:

# -*- coding: utf-8 -*-
# @Author: Michale
# @Date:   2017-05-04 15:00:41
# @Last Modified by:   Michale
# @Last Modified time: 2017-05-07 00:46:52
import signal
import queue
import time


class TestClass(object):
    queue = queue.Queue()

    def __init__(self):
        signal.signal(signal.SIGINT, self.stopIfPressKill)

    def stopIfPressKill(self, mySignal, stack):
        if mySignal == signal.SIGINT:
            print('you pressed CTRL-C')
            self.queue.put_nowait('stop')
            print(self.queue.qsize())

    def mainThread(self):
        while True:
            time.sleep(1)
            if not self.queue.empty():
                data = self.queue.get()
                print(data)
                if data == 'stop':
                    break
                else:
                    self.queue.put(data)


if __name__ == '__main__':
    yoo = TestClass()
    yoo.mainThread()

解释一下三个模块的作用:

思想

多线程的引入使得非主线程在启动后就很难控制,所以迫使人们使用消息队列这样的方式实现线程间通信。

但其实不论是否是多线程,系统各个模块本就应该将细节封装起来,而使用事件是他们协同工作,这样对于降低系统耦合有很大帮助,这也是一个好的系统的设计思想:为变化而设计。

/python/ /并发/