【发布时间】:2018-08-13 23:55:45
【问题描述】:
我是 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():
...
...
【问题讨论】:
-
如何运行这个函数?您是否明确使用线程?杀死一个 进程 依赖于操作系统,但您可以设置一些信号处理以以其他方式中断该功能,如果不知道它是如何运行的,很难给出建议。
-
@cdarke 这要复杂得多。我有很多功能,这些功能同时运行。我有使用 procbridge 的服务器和客户端应用程序,就像我说的我需要运行这个函数来监听无线电帧,并且不时我需要完全终止它。所以我有服务器端,它一直在等待来自客户端的一些命令。客户端给出运行recv函数的命令,然后我需要使用命令来终止它
-
@cdarke 我需要补充一点,我不能只是 radio.stopListening 因为我使用其他函数来监听其他帧,只需要终止整个函数以避免一些麻烦
-
您是在使用线程还是这些函数在不同的进程中运行?您使用的是哪种操作系统?
-
@BengBeng:使用您在 cmets 中提供的代码更新 (edit) 您的问题帖子。在 Stack Overflow 上,cmets 是次要的,所有关于问题的信息都应该在问题帖子本身中。
标签: python multithreading multiprocessing kill terminate