阅读串口读取中的子进程

时间:2012-11-27 13:25:05

标签: python multiprocessing

您好我正在使用串口通信使用python代码到我的设备之一。它发送一组十六进制代码,接收一组数据。处理它。

此数据必须存储在数据库中。

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用烟斗。 使用subprocess模块中止两个进程,第一个从串行端口读取并将十六进制代码集写入stdout。这通过管道传输到第二个进程,该进程从stdin读取并更新数据库。