gpt4 book ai didi

python - 您如何同时处理线程之间的数据传递(3 个 while True 循环)?

转载 作者:行者123 更新时间:2023-12-04 08:00:59 25 4
gpt4 key购买 nike

对我正在使用的内容的简要说明:有 3 个板需要通过串行进行通信。

  • BB AI
  • Nucleo STM32 L4XX (A)
  • Nucleo STM32 L4XX (B)

  • 现在,BB AI 用作使用 python 脚本将两个 Nucleo 板连接在一起的集线器。串行通信使用 pyserial 处理。 (在驻留在 BB AI 中的 python 脚本中)。
    Nucleo A 通过从 BB AI 串行发送的命令( input() 获取用户命令的函数)处理电磁阀,nucleo B 读取传感器值,要求每秒读取传感器值 20 次。
    需要:使用线程运行处理来自 BB AI 的核 A 和核 B 的两个函数,因为任务比 CPU 更受 IO 限制。
    问题: function_A需要处理来自 BB AI 的核 A 来获取 function_B 每秒给出 20 次的传感器值。
    同时 function_A需要使用以下方法读取用户输入:
    while True:
    user_in = input("> ")
    到目前为止,我可以得到 function_B来自 function_A 中的 Nucleo B 的值用于 Nucleo A(使用线程)。
    运行线程,如:
    with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
    f1 = executor.submit(function_A)
    f2 = executor.submit(function_B)
    并在 function_B while读取用户输入的循环:
    while True:
    #before sending values to Nucleo A try to print them
    #to check they can run concurrently as users input commands.
    #both is a global variable from function_B
    print(both , end='\r' , flush=True)

    # get user commands and service
    user_in = input("> ")
    user_in = user_in.lower()
    comand_check(user_in)
    有没有一种方法可以不停地打印和使用 input( ) 函数呢?

    最佳答案

    您将需要一个专用线程处理 input() .看起来您已经有两个线程用于两个 input() s。伟大的!
    现在他们需要互相交谈,同时避免任何竞争条件。消息队列运行良好,因为它为您处理锁定。
    请注意 input() 阻塞线程,直到答案准备好。这个线程被阻塞时不会发生任何其他事情,当它没有被阻塞时,它应该快速处理它刚刚收到的任何输入,然后迅速跳回到 input() 中被阻塞的状态。 .
    Non-blocking, multi-threaded example answer 可能会帮助您实现您正在寻找的内容。
    如何突破input()告诉线程死亡的经典方法是设置一个标志,然后依靠该线程及时检查该标志。按 CTRL-C又名 ^C打破输入:

    stop = False
    While not stop:
    try:
    a = input()
    queue.add(a)
    except KeyboardInterrupt:
    stop = True

    关于python - 您如何同时处理线程之间的数据传递(3 个 while True 循环)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66470455/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com