我正在使用Gnuradio 框架。我处理我为发送/接收信号而生成的流程图。这些流程图初始化并启动,但它们不会将控制流返回给我的应用程序:
我进口的time
while time.time() < endtime:
# invoke GRC flowgraph for 1st sequence
if not seq1_sent:
tb = send_seq_2.top_block()
tb.Run(True)
seq1_sent = True
if time.time() < endtime:
break
# invoke GRC flowgraph for 2nd sequence
if not seq2_sent:
tb = send_seq_2.top_block()
tb.Run(True)
seq2_sent = True
if time.time() < endtime:
break
问题是:只有第一个 if 语句调用流程图(与硬件交互)。我陷入了困境。我可以使用线程,但我不知道如何在 Python 中超时线程。我怀疑这是可能的,因为似乎杀死线程不在 API 中。这个脚本只需要在 Linux 上工作......
如何正确处理 Python 的阻塞函数——而不杀死整个程序。这个问题的另一个更具体的例子是:
import signal, os
def handler(signum, frame):
# print 'Signal handler called with signal', signum
#raise IOError("Couldn't open device!")
import time
print "wait"
time.sleep(3)
def foo():
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(3)
# This open() may hang indefinitely
fd = os.open('/dev/ttys0', os.O_RDWR)
signal.alarm(0) # Disable the alarm
foo()
print "hallo"
我怎么还是得到print "hallo"
。;)
谢谢,马吕斯