2

こんにちは、Python コードを使用してデバイスの 1 つにシリアル ポート通信を使用しています。Hex コードのセットを送信し、データのセットを受信します。それを処理します。

このデータはデータベースに保存する必要があります。

MYSQLdb ライブラリをデータベースにプッシュする別のスクリプトがあります。

1 つのスクリプトで順番にそれを行うと、サンプリング レートが大幅に低下します。データベースに接続してテーブルに挿入しない場合、1 秒あたり最大 32 個のデータ セットをサンプリングできます。

マルチプロセッシングを使用して実行しようとすると、親プロセスが子の参加を待っているため、サンプリング レートが 0.75 になります。どうすればこの状況に対処できますか。

キューを使用してデータを埋めることで、それらを個別に実行することは可能ですか?

4

2 に答える 2

2

Use threading and Queue.

here is an example:

from Queue import Queue
import threading
import serial

def readline(ser,output):
    threadLock.acquire()# Get lock to synchronize threads
    output.put(ser.readline())
    threadLock.release()# Free lock to release next thread
    # this will go on forever until you kill the program

if __name__=='__main__':
    output = Queue()
    with serial.Serial(com,baudrate=115200,timeout=1) as ser:
        ser_thread = threading.Thread(target=readline, args=(ser,output,))
        ser_thread.start()
        while(True):
             threadLock.acquire()#wait until lock is free
             try:
                 data=output.get()
             threadLock.release()# Free lock to release next thread
             # do somthing with data
于 2012-11-27T14:04:42.763 に答える
1

パイプを使用します。モジュールを使用して 2 つのプロセスを作成しsubprocessます。最初のプロセスはシリアル ポートから読み取り、16 進コードのセットを stdout に書き込みます。これは、stdin から読み取り、データベースを更新する 2 番目のプロセスにパイプされます。

于 2012-11-27T13:42:55.813 に答える