我正在開發一個流量跟蹤系統,該系統分析已經收集的視頻。我正在使用 opencv、threading、pytorch 和 dectron2。為了加快從 opencv 抓取幀的速度,我決定使用一個線程,它運行一個循環,用幀填充隊列,如本文中所見。在實現這個之后,我可以像我的處理管道的其余部分一樣快地訪問幀,所以那里沒有問題。當我現在對幀進行推理(只是通過 Faster R-CNN 模型的前向傳遞)時,就會出現問題,這需要 5 秒以上,而過去需要 0.11 秒。我的 GPU 正在被使用,而我的 CPU 遠未充分利用。什么可能導致這種情況發生?
1 回答

森欄
TA貢獻1810條經驗 獲得超5個贊
CPython 有一個全局解釋器鎖。這意味著解釋器有一個大鎖,它可以防止同時從多個線程評估 Python 字節碼。
用 C 實現并提供對高級操作的訪問的包通常能夠在運行時釋放 GIL,但如果您的處理代碼主要是 Python 和 CPU-bound,您將不會從多線程中獲得任何加速:您'會有線程相互爭斗,但由于 GIL,您的處理最終將完全按順序進行。
在這種情況下,您需要多處理來獲得加速,GIL 是每個解釋器的,因此不同進程中的獨立解釋器不會相互干擾。但是,通信/同步成本甚至更高。
添加回答
舉報
0/150
提交
取消