您好我正在使用串口通信使用python代码到我的设备之一。它发送一组十六进制代码,接收一组数据。处理它。
此数据必须存储在数据库中。
我有另一个脚本,它有MYSQLdb库将它推入数据库。
如果我在一个脚本中按顺序执行此操作,我会失去很多采样率。如果我不连接到数据库并将其插入表中,我每秒最多可以采样32个数据集。
如果我使用Multiprocessing并尝试运行它,我的采样率会变为0.75,因为父进程正在等待子进程加入。那我怎么能处理这种情况呢。
是否可以通过使用队列来填充数据来独立运行它们?
答案 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读取并更新数据库。