関数getcontext() は、スレッド毎に別々のContext
オブジェクトにアクセスします。別のスレッドコンテキストを持つということは、
複数のスレッドが互いに影響を及ぼさずに (getcontext.prec=10
のような)
変更を適用できるということです。
同様に、setcontext() 関数は自動的に引数のコンテキスト を現在のスレッドのコンテキストに設定します。
getcontext() を呼び出す前にsetcontext() が 呼び出されていなければ、現在のスレッドで使うための新たなコンテキスト を生成するためにgetcontext() が自動的に呼び出されます。
新たなコンテキストは、DefaultContext と呼ばれる雛形から コピーされます。アプリケーションを通じて全てのスレッドに同じ 値を使うようにデフォルトを設定したければ、DefaultContext オブジェクトを直接変更します。getcontext() を呼び出す スレッド間で競合条件が生じないようにするため、DefaultContext への変更はいかなるスレッドを開始するよりも前に 行わねば なりません。以下に例を示します:
# スレッドを立ち上げる前にアプリケーションにわたるデフォルトを設定 DefaultContext.prec = 12 DefaultContext.rounding = ROUND_DOWN DefaultContext.traps = ExtendedContext.traps.copy() DefaultContext.traps[InvalidOperation] = 1 setcontext(DefaultContext) # その後でスレッドを開始 t1.start() t2.start() t3.start() . . .
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。