我在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():
...
...
答案 0 :(得分:0)
无法从外部停止Python线程。"如果线程进入等待状态(例如因为等待radio.recv()
完成而没有运行),那么你无能为力。
在单个进程中,线程是自治的,你可以做到最好,所以在检查线程时为线程设置一个标志(通过终止)。
正如您已经发现的那样,您可以终止子流程,但您会遇到流程如何相互通信的问题。
您的代码和使用它的测试确实没有给出足够的信息(在Python中似乎有几个NRF24实现)来调试您报告的问题。