PySerial non-blocking read loop

综合编程 2018-08-22 阅读原文

I am reading serial data like this:

connected = False
port = 'COM4'
baud = 9600

ser = serial.Serial(port, baud, timeout=0)

while not connected:
    #serin = ser.read()
    connected = True

    while True:
        print("test")
        reading = ser.readline().decode()

Problem is that it prevents anything else from executing including bottle py web framework. Adding sleep() won't help.

Changing "while True"" to "while ser.readline():" doesn't print "test" which is strange since it worked in python 2.7. Any ideas what could be wrong?

Ideally I should be able to read serial data only when it's available. Data is being sent every 1000ms.

Put it in a separate thread, for example:

import threading
import serial

connected = False
port = 'COM4'
baud = 9600

serial_port = serial.Serial(port, baud, timeout=0)

def handle_data(data):
    print(data)

def read_from_port(ser):
    while not connected:
        #serin = ser.read()
        connected = True

        while True:
           print("test")
           reading = ser.readline().decode()
           handle_data(reading)

thread = threading.Thread(target=read_from_port, args=(serial_port,))
thread.start()

http://docs.python.org/3/library/threading

Hello, buddy!

责编内容by:Hello, buddy!阅读原文】。感谢您的支持!

您可能感兴趣的

Getting started with the python SDK part 2: unname... In the first article in this series we looked at the sdk installation steps, nomenclature, and basic BIG-IP instantiation. In this article, we’ll ...
利用 Python 进行数据分析 中文第二版 第6章 数据加载、存储与文件格式... 访问数据是使用本书所介绍的这些工具的第一步。我会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具。 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源。 6.1 读写文本格式的数据 pand...
带你和Python与R一起玩转数据科学: 探索性数据分析... 内容简介 本系列将介绍如何在现在工作中用两种最流行的开源平台玩转数据科学。本文先来看一看数据分析过程中的关键步骤 – 探索性数据分析(Exploratory Data Analysis,EDA)。 探索性数据分析发生在数据收集和数据清理之后,而在数据建模和分析结果可视化展现之前。然而,这是一...
对python的一些思考 初上这门课,内心只是想混学分,课程内容并不关心,但是当我上的第一门课时,我就对这门课起了兴趣。因为对这门课的一无所知,我内心有点彷徨,听到了老师的要求和对考试的说明时,老师要求不高,我也就不慌了。选了这门课,既可以学习一些编程语言,又可以修够学分,我还是比较满意的。对于这门课,我希望这门课能够讲解一...
Python学习笔记【第十篇】:Python面向对象进阶... 保护对象的属性 如果有一个对象,当需要对其进行修改属性时,有2种方法 对象名.属性名 = 数据 ---->直接修改 对象名.方法名() ---->间接修改 为了更好的保存属性安全,即不能随意修改,一般的处理方式为 将属性定义为私有属性 添...