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

时间:2018-03-06 07:31:05

标签: python multithreading multiprocessing kill terminate

我在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():
           ...
...

1 个答案:

答案 0 :(得分:0)

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

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

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

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