2015-10-26 134 views
0

我正在嘗試編寫一個簡單的python腳本,它將在115200處讀取傳入的串行數據(usb適配器)。每接收一行後,它都必須將其上傳到運行在Synology NAS在同一個網絡中。Python:將傳入的串行數據發送到MySQL

從python內部看到的mysql INSERT的問題是,它可能需要0.5秒到1,3秒,在這段時間內,任何傳入的消息都將丟失,可能有幾個。

我已經嘗試了許多線程選項代碼,但不能讓它爲正常例子代碼告訴你如何在同一時間運行1,2或3個線程,但我需要的是因爲他們是創建線程工作傳入數據所需的。

btw:使用Raspberry Pi。

作爲參考,有些我都試過了例子: http://www.tutorialspoint.com/python/python_multithreading.htm

+1

您應該調查爲什麼INSERT需要這麼長時間,而不是喋喋不休地使用線程。 –

+0

需要多長時間?即使需要0.1秒,我也不會在這段時間讀取串行端口。反正我的代碼是很簡單的測試:進口MySQLdb的 進口時間 開始=了time.time() DB = MySQLdb.connect( 「192.168.1.xxx」, 「」, 「」, 「」) 光標= db.cursor() SQL = 「」 「INSERT INTO測試(V1,V2)VALUES(111,222)」, 「」 嘗試: cursor.execute(SQL) db.commit() 除: #回滾,以防有任何錯誤 db.rollback() db.close() print「time:」+ str(time.time() - star t)更好的方法的建議? – Serge

+0

我已經添加了一些中間時間,並且非常有趣,看到99%的浪費時間在mysqldb.connect中。正如你可以從下面的這些數據看到的。總是打開db連接打開是個好主意嗎? ---------連接後的時間:1.02 wrt前一個:1.02 ---------光標後的時間:1.02 wrt前一個:0.0 ---------執行後的時間:1.09 wrt前一個:0.07 ---------關閉後的時間:1.1 wrt前一個:0.0 – Serge

回答

0

如何只有兩個線程 - 讓第一監測串行數據&創建郵件列表存儲 - 第二監視列表的消息,如果不是空的,則存儲到數據庫&從列表中刪除。

+0

聽起來不錯保羅,我確實嘗試過類似的東西,但是我的編碼不適合工作,因爲我無法使其工作。你可以爲我提供什麼幫助?謝謝 – Serge

+0

我會使用一個[queue](https://docs.python.org/2/library/collections.html#collections.deque)來存儲列表,但不能對Python有更多幫助 - 只是開始自己看着它。 – PaulF

+0

無論如何感謝保羅,也許別人可以從中建立並幫助我。我將自己做一些測試,如果我設法得到它,我會發布它,但任何進一步的幫助真的很感激。 – Serge

相關問題