実現したいこと
並列・並行処理において、関数を終わらせる関数を探しています。
コード
python
1import serial 2import csv 3from concurrent.futures import ThreadPoolExecutor 4 5def A(): 6 For i in range (2333): 7 serA = serial.Serial('/dev/ttyACM43',9600,timeout=None) 8 lineA = serA.readline() 9 lineA = str(line) 10 Alist.append() 11 print(lineA) 12 ser.close() 13#ここにB()を終わらせる処理をつけたいです。 14def B(): 15 while True: 16 serB = serial.Serial('/dev/ttyACM5',9600,timeout=None) 17 lineB = serB.readline() 18 lineB = str(line) 19 Blist.append() 20 print(lineB) 21 ser.close() 22 23def main(): 24 with ThreadPoolExecutor(max_workers=6) as executor: 25 executor.submit(A) 26 executor.submit(B) 27 28if __name__ == '__main__': 29 main() 30 31with open('cool.csv','a')as f: 32 writer=csv.writer(f) 33 writer . writerow (Alist) 34 35with open('hotl.csv','a')as f: 36 writer=csv.writer(f) 37 writer . writerow (Blist)
試したこと
関数Aが終わると(#ここにB()を終わらせる処理をつけたいです。の部分)キーをクリックするようなコードを加え、関数②にはクリックを検知して終わるような処理をつけてみましたが、タイミングが合わず、うまくいきませんでした(そりゃそうだ)
また、while の中にcsvファイルに書き込むような処理を入れ、処理が終わったタイミングでkillすることも考えられますが、データをリストにして、あとで一気に保存する手法を取りたいです
その他の補足
関数を終わらせる関数がないなら、どの様な処理をするとよいと思いますか。
もっと詳しい説明が必要だ、などの指摘もお願いします。
また、せっかく答えていただいても、条件を追加させていただくかもしれません
Serial() にタイムアウトをつけ、フラグが立っていれば終了。
回答2件
あなたの回答
tips
プレビュー