multithreading - PyQt4 中的线程

标签 multithreading ffmpeg imagemagick pyqt4 python-2.6

我正在制作一个调用 Imagemagick 和 ffmpeg 的 PyQt4 应用程序,但是完成任务需要太多时间,我想知道是否有办法为此实现线程,该应用程序将在多核机器上运行,以及一些方法我见过效率不够。提前致谢

最佳答案

答案是肯定的和否定的——你可以使用 QThread 进行线程化,但你仍然会受到 GIL 的约束,因此你的线程将串行运行。

您可以尝试使用多处理在其自己的进程中创建一个工作类并向其发送工作(或让它从队列中窃取工作),但这可能会在复制对象和在进程之间发送对象时引入其自身的性能损失......

重新阅读您的问题后,看起来 Imagemagick 和 ffmpeg 是外部可执行文件,在这种情况下,GIL 在您等待进程执行时被释放。我能问一下你是如何运行这些的吗?我倾向于发现创建工作队列和事件循环会更好。每次在事件循环中,您都会检查正在运行的进程是否已完成,然后获取它们的输出。对于这个 subprocess.Popen 比 os.command 更有用。

如果您使用 QTimer,您可以利用 QApplication 的事件循环,它还有一个额外的好处是允许您的 GUI(假设您有一个)在滴答声之间刷新。

关于multithreading - PyQt4 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5224679/

相关文章:

vb.net - 在 vb.net 中使用线程的进度 "bar"

java - 如何关闭正在运行的套接字线程?

使用 ffmpeg 进行视频标准化

javascript - 从浏览器录制视频并流式传输到 Youtube/Twitch 时,如何使用 ffmpeg 添加音频?

PythonMagick ColorSpace 类型

ruby - 将 PDF 转换为 JPG 时质量低下

c++ - pselect() 与循环中的 accept()

java - 我可以终止等待 TCP 连接进入的线程吗?

c# - FFMPEG C# Winforms 输出到文本框

node.js - Nodejs gm 库 - 如何创建多个图像按顺序分层的转换命令