2

嗨,我正在使用 python 代码与我的一台设备进行串行端口通信。它正在发送一组十六进制代码,接收一组数据。处理它。

这些数据必须存储在数据库中。

我有另一个脚本,它有 MYSQLdb 库将其推入数据库。

如果我在一个脚本中按顺序执行此操作,我会在采样率上损失很多。如果我不连接到数据库并将其插入表中,我每秒最多可以采样 32 个数据集。

如果我使用 Multiprocessing 并尝试运行它,我的采样率将变为 0.75,因为父进程正在等待子进程加入。那么我该如何处理这种情况。

是否可以通过使用队列填充数据来独立运行它们?

4

2 回答 2

2

使用线程和队列。

这是一个例子:

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

使用管道。使用该subprocess模块创建两个进程,第一个从串行端口读取并将一组十六进制代码写入标准输出。这通过管道传送到从标准输入读取并更新数据库的第二个进程。

于 2012-11-27T13:42:55.813 回答