【问题标题】:Sending variables from one python thread to another将变量从一个 python 线程发送到另一个
【发布时间】:2020-10-12 04:40:42
【问题描述】:

假设我有一个函数将在自己的线程中运行,因为它通过端口获取串行数据。

def serialDataIncoming ():
    device = Radar()
    device.connect(port 1, baudrate 256000)
    serialdata = device.startscan
    for count, scan in enumerate(serialdata):
        distance = device.distance
        sector = device.angle

现在我想在自己的线程中运行它

try: 
   thread.start_new_thread(serialDataIncoming())
except: 
   # error handling here

现在,我想添加到 serialDataIncoming() 的代码中,我将距离和扇区发送到另一个要处理的函数,然后发送到其他地方,现在这是这个问题,从“设备传入的数据” " 不断被发送,如果我在另一个循环中失去一些时间,我可能会遇到延迟甚至丢失一些数据,所以我想创建一个新线程并从该线程运行一个函数,该函数将从第一个接收数据线程和处理它并做任何事情。

def dataProcessing():
    # random code here where I process the data

但是我的问题是,如何将两个变量从一个线程发送到第二个线程,在我看来,在多个线程中,第二个线程必须等到它接收到变量然后开始工作,它将被发送一个同时处理大量数据,因此我可能不得不引入第三个线程来保存这些数据,然后将其发送到处理的线程。

所以问题基本上是,我将如何在 python 中编写将 2 个变量发送到另一个线程,以及如何在第二个线程上使用的函数中编写?

【问题讨论】:

  • 变量不是您可以“发送”的东西。变量是您可以存储值的位置。值是您可以发送的。 Python3 中有两种主要类型的值:“原始”值,例如数字和字符,以及“对象引用”。如果我的猜测是正确的,那么您的语句device=Radar() 创建一个新的Radar 对象,然后将该对象的引用 存储到名为device 的变量中。 device 变量和它所引用的 Radar 对象是两个不同的东西。

标签: python-3.x multithreading


【解决方案1】:

要将参数传递给线程函数,您可以这样做:

def thread_fn(a, b, c):
    print(a, b, c)

thread.start_new_thread(thread_fn, ("asdsd", 123, False))

参数列表必须是元组或列表。然而,在 Python 中,一次实际上只有一个线程在运行,因此实际上可能更可靠(也更简单)找到一种方法来用一个线程执行此操作。从它的声音来看,您正在轮询数据,因此这不像文件访问那样操作系统会在文件操作完成后再次唤醒线程时通知线程(因此您不会从多线程文件中获得那种收益访问。)

【讨论】:

  • 哦,谢谢,我在想python可以运行并行线程,所以我可以继续我最初的一个线程的想法,而不是在那里处理所有数据,因为我得到一个串行数据和我知道我应该得到的参数,我可以抓取我需要的所有数据,处理它,然后再次轮询新数据。谢谢。仍然对此感兴趣,因为我想知道更多关于 python 线程的未来。
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多