在Python中一次运行多个方法

时间:2011-09-04 13:33:36

标签: python

我正在尝试运行一个有无限循环的方法来创建视频显示。在另一个处理硬件输入的循环中调用此方法,因此无法像视频一样快地循环,如果我使用外部循环来运行视频,则会导致延迟。有没有办法启动视频循环,然后启动硬件循环并单独运行它们?目前,如果我调用视频循环,它就会停留在该循环中,直到它返回。

2 个答案:

答案 0 :(得分:2)

是的,您可以使用Python自己的threading模块,或像gevent这样的协作微线程模块。

请注意,Python的线程机制为CPython(大多数盒子上的默认Python实现)提供了这个免责声明:

  

由于Global Interpreter Lock,在CPython中只有一个线程可以同时执行Python代码(即使某些面向性能的库可能会克服此限制)。如果您希望应用程序更好地使用多核计算机的计算资源,建议您使用multiprocessing。但是,如果要同时运行多个I / O绑定任务,则线程仍然是一个合适的模型。

根据您调用的基础模块的运行方式,您可能会发现在使用threading时,一个线程不会经常放弃控制(如果有的话)。在这种情况下,使用协作微线程可能是您唯一的选择。

答案 1 :(得分:1)

是的,您可以使用Python自己的multiprocessing模块。

请注意,多处理不必与GIL对抗,并且可以同时处理您为其执行的所有操作。

另一方面,多处理模块有一个警告,当你产生一个进程时,它是一个完全独立的python解释器。所以它不仅仅是一个OS控制的线程。它本身就是一个完全不同的过程。这可能会增加程序的开销,但完全避开GIL的优势使得这只是一个温和的问题。