Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 线程同步的设计帮助_Python_Multithreading_Synchronization - Fatal编程技术网

Python 线程同步的设计帮助

Python 线程同步的设计帮助,python,multithreading,synchronization,Python,Multithreading,Synchronization,我正在编写一个python程序来验证设备事件 我不断地从一个设备的串行端口读取一些数据。当我在设备的串行端口上写东西时,设备会在串行端口上写一个字符串,我必须读取该字符串。从串行端口连续读取部分是在一个单独的工作线程中,我逐行读取它并将其写入线程。设备连续写入一些数据,并在serail端口上写入事件描述 更具体地说,当我在设备上写东西时,它会在设备上生成一个事件。事件的描述将写回串行端口。我必须将其读回并验证事件是否已发生 现在,当我在一个线程中逐行读取设备输出时发生了什么,当我写一些东西并开始

我正在编写一个python程序来验证设备事件

我不断地从一个设备的串行端口读取一些数据。当我在设备的串行端口上写东西时,设备会在串行端口上写一个字符串,我必须读取该字符串。从串行端口连续读取部分是在一个单独的工作线程中,我逐行读取它并将其写入线程。设备连续写入一些数据,并在serail端口上写入事件描述

更具体地说,当我在设备上写东西时,它会在设备上生成一个事件。事件的描述将写回串行端口。我必须将其读回并验证事件是否已发生

现在,当我在一个线程中逐行读取设备输出时发生了什么,当我写一些东西并开始读取要发生的事件描述时,该事件的输出已经消失,下一个其他输出行正在被读取。如何同步此操作


在设计此部件时,有什么可以帮助我的吗?

如果您只是在异步IO中使用线程,那么最好不要使用线程并使用select.select,或者如果您想让自己更轻松,甚至可以使用asyncore


代码片段如下所示:

类串行通信:

 __init__(self,comport):

     self.comport = comport

     self.readSerialPortThread = ReadSearialPortThread(self.comport)

  def writeStringToSerialPort(someString):

     self.comport.write(someString)

  def waitfordata(someString):

    #I have to continuously read data from serial port till we someString.
在ReadSearialPort中,serialport中的线程数据正在连续读取设备信息值。当我使用writeStringToSerialPort()写入数据时,设备会向串行端口输出一些数据。我必须从函数waitfordata读取这些数据,以验证设备的响应


现在发生的是,当我编写一些值并调用waitfordata()时,readSerialPortThread已经读取了所需的值,并继续读取一些其他值,如设备信息。所以我失去了那里的价值观。我想知道如何将其同步。

您是否有任何关于您现在所做工作的小代码片段?如果您一直在从设备读取数据,那么就不应该“漏掉”一行。此外,这个读写过程是否需要两个独立的线程?这听起来像是一个针对单个线程的请求-响应系统。它是否应该是异步的,在稍后的某个时候,读取器将验证发布的事件,并且编写器可以继续前进?代码片段如下:类SerialCom:\uuuu init\uuuuu(self,comport):self.comport=comport self.readSerialPortThread=ReadSearialPortThread(self.comport)def writeStringToSerialPort():self.comport.write(somedata)请仅对实际答案使用Post应答按钮。您应该修改原始问题以添加其他信息。