并行处理——如何启动一个图形小部件而不让控制流卡在python的主循环中?



我现在正在为一个即将到来的项目设计程序结构,我被以下问题卡住了:
归结到它最重要的元素,我的程序被分成两个文件logic.pyoscilloscope.py
在logic.py中,我在/dev/input/..上初始化了一个设备,并为信号处理等设置了滤波器。在oscilloscope.py中,我使用Pygame实现了一个示波器,它应该解释/显示来自注册输入设备的输入。

现在我在logic.py中有一个主循环,它连续地监听来自设备的输入,然后将处理过的数据转发到示波器,但我也有来自Pygame示波器实现的主循环。当从logic.py初始化示波器时,如何防止我的程序控制流卡在Pygame主循环中,如下所示:

from oscilloscope import *
...
... #initializing filters to use, device to listen to etc.
...
self.osc = Oscilloscope(foo, bar) #creating an instance of an oscilloscope implemented with Pygame
self.osc.main() #calling the main loop of the oscilloscope. This handles all the drawing and updating screen.
#usually the flow would stop here as it is stuck in the Pygame main loop
#I need it to not get stuck so I can call the second main loop.
self.main() #captures and processes data from /dev/input/... sends processed data to the Pygame oscilloscope to draw it.

由于没有任何实际的代码,我希望注释澄清我想做什么

这样如何:(我知道我的建议可能只是理论上的):

self.main()循环调用self.osc.main()循环。要做到这一点,您必须编辑self.osc.main()函数,使其不会永远运行,而是只运行一次。保持self.main()循环不变,每个循环调用一次self.osc.main()

而不是你现在正在做的事情:

def main(): #This is the self.osc.main() function
    while True: #run forever
        doSomething()
def main(): #This is the self.main() function
    while True: #also run forever
        doSomethingElse()

你可以这样做:

def main(): #This is the self.osc.main() function
    doSomething() #notice I removed the loop. It only runs once. This is because the looping is handled by the other main() function (the one you call self.main())
def main(): #This is the self.main() function
    while True: #also run forever
        self.osc.main() #since we have now changed the self.osc.main() loop to run only once
        doSomethingElse()

相关内容

  • 没有找到相关文章

最新更新