[英]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.