python - 使用嵌套类在进程之间共享队列 (Python)

标签 python process inner-classes

我有一个关于 Python 进程之间共享队列的问题。下面,我有三个队列、一个主进程和三个内部进程。每个内部进程都会从各个队列中添加和获取值(它们需要轻松访问队列)。

我认为它现在就可以工作,但是这段代码是我将要从事的一个大项目的基础,我想确保没有更好的方法来做到这一点。我不知道。我只是想出了这个主意。从其他一些帖子看来,嵌套类不太像 Python。

有什么建议吗?这段代码容易读还是很难读?放弃嵌套类还是保持原样?

谢谢大家。

class MainController(Process):
    def __init__(self):
        self.queue_stream   = Queue()
        self.queue_language = Queue()
        self.queue_expander = Queue()

        self.control_stream   = self.StreamController(self).start()
        self.control_language = self.LanguageController(self).start()
        self.control_expander = self.ExpanderController(self).start()

        print 'Launching Main Controller'

    class StreamController(Process):
        def __init__(self, main):
            Process.__init__(self)
            self.main = main
            print 'Launching Stream Controller'

        def run(self):
            while True:
                self.main.queue_stream.put('hello, stream')

    class LanguageController(Process):
        def __init__(self, main):
            Process.__init__(self)
            self.main = main
            print 'Launching Language Controller'

        def run(self):
            while True:
                print self.main.queue_stream.get()
                self.main.queue_language.put('hello, language')

    class ExpanderController(Process):
        def __init__(self, main):
            Process.__init__(self)
            self.main = main
            print 'Launching Expander Controller'

        def run(self):
            while True:
                print self.main.queue_language.get()
                self.main.queue_expander.put('hello, expander')

def main():
    # Launch all queues for the system
    control_main = MainController()

if __name__ == '__main__':
    print 'Launching System...'
    main()

最佳答案

我建议您使用线程模块而不是进程。我建议您仅当子类扩展父类的功能时才使用嵌套类。

class   WorkerThread(threading.Thread):

另一个建议是在子线程之间使用共享锁,以防止共享队列上的竞争条件。

            tasks_lock.acquire()
            ret = tasks_queue.get()
            tasks_lock.release()

看看这个 Example

关于python - 使用嵌套类在进程之间共享队列 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048789/

相关文章:

python - 在 Python 中从 Excel 复制 YEARFRAC() 函数

python - 如果内容是阿拉伯语,Scrapy 检索 json 中的符号

objective-c - 使用 getrusage

C++:如何访问内部类的方法?

python - 在 JSON Python 上获取标签名称

python - 为 Google Speech API 创建合适的 WAV 文件

batch-file - 如何让.BAT文件完成后自行删除?

process - Elixir:执行完函数后进程会发生什么

java - Android + MySQL 使用 com.mysql.jdbc.Driver

Java匿名类和可达的私有(private)变量