在Python中同时运行多个方法

0 投票
2 回答
700 浏览
提问于 2025-04-17 01:23

我正在尝试运行一个方法,这个方法里面有一个无限循环,用来创建视频显示。这个方法是在另一个循环里面调用的,这个外部循环负责处理硬件输入,所以它的运行速度跟视频循环比起来会慢很多。如果我用外部循环来运行视频,就会导致卡顿。请问有没有办法先启动视频循环,然后再启动硬件循环,让它们分别运行?现在如果我调用视频循环,它就会一直停在那个循环里,直到返回。

2 个回答

1

是的,你可以使用Python自带的multiprocessing模块。

需要注意的是,使用多进程时不需要担心GIL(全局解释器锁),它可以同时处理你给它的所有任务。

不过,使用multiprocessing模块时有一个警告:当你创建一个新进程时,它会启动一个完全独立的Python解释器。这并不是一个由操作系统控制的线程,而是一个完全不同的进程。这可能会让程序运行时增加一些负担,但因为它可以完全避开GIL,所以这个问题其实并不严重。

2

是的,你可以使用Python自带的线程模块,或者使用像gevent这样的协作微线程模块。

需要注意的是,Python的线程机制在CPython(大多数电脑上默认的Python实现)中有一个特别的说明:

由于全局解释器锁的限制,在CPython中,只有一个线程可以同时执行Python代码(尽管某些性能优化的库可能会绕过这个限制)。如果你希望你的应用程序更好地利用多核机器的计算资源,建议使用multiprocessing。不过,如果你想同时运行多个输入输出密集型的任务,使用线程仍然是合适的选择。

根据你调用的底层模块的工作方式,你可能会发现使用threading时,一个线程可能很少放弃控制权,甚至根本不放。这种情况下,使用协作微线程可能是你唯一的选择。

撰写回答