在python中终止线程,进程,函数

问题描述 投票:0回答:1

我是python的新手,有一段时间我试图解决具体问题。我有收听和打印无线电帧的功能。为此,我使用NRF24 Lib,整个功能非常简单。关键是我运行这个功能,不时我需要终止它并再次运行。所以在代码中它看起来像

def recv():
    radio.openWritingPipe(pipes[0])
    radio.openReadingPipe(1, pipes[1])
    radio.startListening()
    radio.stopListening()
    radio.printDetails()
    radio.startListening()
    while True:
        pipe = [0]
        while not radio.available(pipe):
            time.sleep(10000/1000000.0)
        recv_buffer = []
        radio.read(recv_buffer)           
        print(recv_buffer)

我从服务器端运行此功能,现在我想停止它并再次运行?它有可能吗?为什么我不能recv.kill()?我读到了线程,多处理,但所有这些都没有给我正确的结果。

我怎么运行它:

    from multiprocessing import Process
      def request_handler(api: str, arg: dict) -> dict:
          process_radio = Process(target=recv())

      if api == 'start_radio':
           process_radio.start()
           ...

      elif api == 'stop_radio':
           process_radio.terminate():
           ...
...
python multithreading multiprocessing kill terminate
1个回答
0
投票

没有办法“从外部”停止Python线程。如果线程进入等待状态(例如因为等待radio.recv()完成而没有运行),那么你无能为力。

在单个进程中,线程是自治的,并且你可以做到最好,因此在检查线程时为线程设置一个标志以进行操作(通过终止)。

正如您已经发现的那样,您可以终止子流程,但是您可以解决流程如何相互通信的问题。

您的代码和使用它的测试并没有提供足够的信息(在Python中似乎有几个NRF24实现)来调试您报告的问题。

© www.soinside.com 2019 - 2024. All rights reserved.