2017-04-25 47 views
1

我有三個Python線程共享ASCII數據。第一個線程以極快的速度從串口讀取串行數據。然後,我解析並將這些數據傳遞給它寫入的套接字。另外,來自串行數據的一些數據被寫入XML文件。我意識到全球解釋器鎖定及其侷限性。我需要在1/10秒內完成所有這些操作。通過利用我在線程之間共享的全局值,我看到大量的CPU使用率和延遲。我不認爲我可以在Python中使用事件,因爲我會在其他情況下使用它。如何在數據線程之間傳遞數據?

如何在同步問題中在這些線程之間共享數據,而不會延遲和CPU在Python中的使用?

回答

3

我認爲最好的方式來實現,這是通過使用python隊列模塊: https://docs.python.org/2/library/queue.html

的隊列基本上名單,但它們是線程安全的,「得到」功能有效地阻塞線程,直到一些數據被排入其中。它應該對CPU更高效。

+0

謝謝。我繼續前進,將我使用的全局變量轉換爲最大大小爲1的線程化FIFO隊列。這使我只能在一個線程安全的環境中一次交出一個項目。另外,我有其他線程執行得太快。所以我放慢了速度,並使用隊列來處理時間敏感的線程,以減少CPU使用率。事實證明,GIL會嚴重破壞我的CPU。 – Speakeasys