LoginSignup
5
3

More than 1 year has passed since last update.

MicroPythonを使ってみる(その2:マルチタスク)

Posted at

MicroPythonでマルチタスク(マルチスレッド)

めでたく第2回目。スレッドを使ったマルチタスクを実現してみる。

用いたもの

その1同様、ESP32 DevKitボード。

マルチタスク手法

今回用いるスレッド(_Thread)以外にも、asyncioなどがあるようだが、どうもうまく動作せず、その他はとりあえずPending。

_Thread

本家サイトのここから情報が見つかる。

試す内容

タスク(スレッド)を2つ起動し、タスク間でメッセージの通信を行うもの。

タスク間通信

キューの利用を考えたが、この記事のスレッド間通信の説明によると、MicroPythonにはQueueモジュールが搭載されていないらしい。なので、単なるリストを利用した。また、リストの排他制御はここでは扱っていない。

ソースコード

こちらのコードをもとに作成。

Thread&List.py
import _thread
import time

q = []  # メッセージを送受信するリスト(Queue)

def SendThread():  # データ送信スレッド
  count = 0
  while True:
    print("Send data")
    q.append(count)  # リストへcount値を入れる
    count += 1
    time.sleep(3)

def RecvThread():  # データ受信スレッド
  while True:
    print("Recv Thread");
    if len(q) > 0:
      data = q.pop()  # リストから値を取り出す
      print('Recv data = {}'.format(data))
    time.sleep(1)

_thread.start_new_thread(SendThread, ())  # SendThreadの起動
_thread.start_new_thread(RecvThread, ())  # RecvThreadの起動
  • SendThread: 3秒毎にcount値を送る&"Send data"表示
  • RecvThread: 1秒毎に"Recv Thread"表示&リストデータがある場合に値を表示

実行結果

ThreadTest.png
成功。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3