私は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"
。;)
ありがとう、マリウス