Help us understand the problem. What is going on with this article?

M5Stack MicroPython API調査記録 スレッド編

More than 1 year has passed since last update.

※ 2018年1月8日現在

M5Stack版MicroPythonの _thread モジュールは本家ESP32版から大きく書き換えられています。MicroPythonの下で動いているFreeRTOSのマルチタスク機能をより活かすように実装されています。そのため、APIにも大きな違いがあり、共通しているのは _thread.start_new_thread()_thread.stack_size() ぐらいです。

モジュール _thread

Python 関数はスレッド上で動かすことができる。これはメインのMicroPythonスレッドとは独立したESP32タスクとして関数が実行されることを意味している。

またスレッド間では通知やメッセージの送受信が行える。

関数

_thread.start_new_thread(th_name, th_func, args[, kwargs])

新しいスレッドを開始し、スレッドIDを返す。

th_name - スレッド名

th_func - スレッドで動かす関数

args - 関数の位置引数のタプル

kwargs - 関数のキーワード引数の辞書

_thread.stack_size([size])

新規にスレッドを作成する際のスレッドのスタックサイズをバイト数で返す。オプションの *size+ は以降で作成するスレッドのスタックサイズを指定する。

スレッドで使っている最大スタックサイズは _thread.list() でチェックできる。

_thread.allowsuspend(allow)

allowTrue にすると、スレッドを休止状態にできるようになる。この関数で設定しない限り、スレッドを休止状態にすることは許されない。この関数は該当のスレッド関数内から呼ばなければならない。

_thread.suspend(th_id)

スレッド関数の実行を休止状態にする。

_thread.resume(th_id)

_thread.suspend() で休止状態にしたスレッド関数を実行可能状態にする。

_thread.kill(th_id)

スレッドを停止し、スレッドが確保されていたメモリを開放する。

_thread.getThreadName(th_id)

th_id に該当するスレッドの名前を返す。

_thread.getSelfName()

スレッドで実行中の関数の名前を返す。

_thread.getReplID()

メイン(REPL)スレッドのスレッドUDを返す。メインスレッドに通知/メッセージを送るのに使える。

_thread.getnotification()

スレッドで実行中の関数に通知が送られてきているかチェックする。溜まっている通知があれば 1 以上の整数、無ければ 0 を返す。

_thread.getmsg()

スレッドで実行中の関数にメッセージが送られてきているかチェックする。溜まっているメッセージがあれば3要素、メッセージタイプ、送り元のスレッドID、メッセージ(整数か文字列)自体を持つタプルを返す。

_thread.notify(th_id, value)

IDが th_id であるスレッドに通知を送る。値 value は 1 以上の整数。

_thread.sendmsg(th_id, msg)

IDが th_id であるスレッドにメッセージを送る。値 mag は整数または文字列。

_thread.replAcceptMsg([flag])

メインスレッド(REPL)がメッセージを受け入れられる場合は True を返す。

メインスレッドから呼び出す場合、オプションの flag (True|False) はメインスレッドでメッセージの受付を許可/禁止するかを指定する。

_thread.list([print])

作成済のスレッドすべての状態を表示する。

オプションの printFalse であれば、スレッドの情報をタプルで返す。スレッド情報のタプルは要素として、スレッドID、タイプ、名前、休止状態か、スタックサイズ、最大スタックサイズを持つ。

inachi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした