繁体   English   中英

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

[英]Terminate thread, process, function in python

我是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线程。 如果线程进入等待状态(例如,由于正在等待radio.recv()完成而未运行),则您无能为力。

在单个进程内,线程是自治的,并且最好的办法是在检查线程时为线程设置一个标志以使其行动(通过终止)。

正如已经发现的那样,它可以出现,您可以终止子流程,但是接下来便遇到了流程之间如何通信的问题。

您的代码及其测试实际上并没有提供足够的信息(Python中似乎有多个NRF24实现)来调试您报告的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM