我对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 实现(来调试您报告的问题。