« 今年もムラサキシキブの実が、、 | トップページ | HP200LX Cドライブのファイルが壊れた »

2015年9月23日 (水)

[Python S60 2.0.0] Python終了に時間がかかる

2015-09-23(水)晴れ

 最近作成しているPyBookシリーズ、特に今改造を繰り返しているPyBookViewerは、Nokia 5800XMでPython for S60 2.0.0(以下 V2.0.0と記述)を使用してテストしています。V2.0.0はタッチ操作の処理が組み込めるので操作がやりやすいからです。ただ、(5800XMで)V2.0.0を使用したときには色々な弱点が出て、対策を考えながら使用してきました。
 今までの対応 「Python スクリプト 雑記」の「25.Python S60 2.0.0

 今回、また使用しにくい現象が出ました。それは、「スクリプトを使用し終わってPythonを終了するとき、終了に時間がかかる」というものです。V1.4.5では特に問題はありません。
 今更な話題ですが、自分のメモとして記録しておくものです。

Scym0376a  Scym0377a  Scym0378a
 (A)           (B)            (C)

 (A)はスクリプトの画面、(B)はスクリプト終了後のPyhton画面、(C)はPython終了後のメニュー画面です。(A)→(B)は直ぐに実行完了しますが、(B)→(C)には15秒かかります。15秒待たされるのは、精神衛生上良くありません。トレースルーチンを組み込んで調べました。

 結論を言うと、大きなデータバッファの類の変数を使用したときに問題が出ることが分かりました。今回の場合は、画面表示用のデータとして、「3項目のリスト変数」のリストという2重構造で、しかも「3項目のリスト変数」が11300個もある変数でした。
 self.scrData=[ [a,b,c], [d,e,f], [    ], [    ],  , , , , , , , , [     ] ] 

一時的変数ではなく、グローバル変数、あるいはクラスの中のselfで持ち回りされる変数の場合は、Pythonに戻る前にスクリプトのなかでクリアしておくと良いことが分かりました。 (空要素を割り当てて開放する 例: self.scrData=[ ] ) ただ、V1.4.5では、終了前には必要ないのですが、スクリプトの中でクリアするときに時間がかかることが分かりました。即ち、V2.0.0とV1.4.5では動きが違います。

V1.4.5:上記のようなリストの場合、スクリプト内でのクリアに時間がかかる。
V2.0.0.:スクリプト内でクリアして終了しないとPython終了に時間がかかる。

 対策は次のような順番になります。
(1)抜本対策は階層構造リストの大きなデータを作成しない。
今回、「リストのリスト」を「リスト」にしたら問題がなくなりました。大きなデータの時に
scrData=[ [ a,b], [c,d],  , , , , [   ] ]   という二層構造のリストを作るより

scrData1=[a,c, , , , , ]
scrData2=[b, d, , , , ] という2つのリストにして、要素は順番で対応を取るようにすると、問題は少なくなります。

(2)グルーバル変数、あるいはクラスの中のselfで持ち回りされる変数は、使用が終わったら(終了前などに)クリアしておく。

今のところ、この位しか思いつきません。
対策とテストの組み合わせの記録です。

Pybookviewertest01

 Nokia 5800XM はS60 5thとしては初期の機種です。ですから、5800XMのOSの問題かPython for S60 V2.0.0の問題かは分かりません。しかし、今となっては、どちらもバージョンアップされることはありませんから、手探りで使える範囲で使うしかないかなと思っています。それでも、しつこく Python for S60 を弄っています。
 

|

« 今年もムラサキシキブの実が、、 | トップページ | HP200LX Cドライブのファイルが壊れた »

Python」カテゴリの記事

アプリケーション」カテゴリの記事

携帯電話」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/62336338

この記事へのトラックバック一覧です: [Python S60 2.0.0] Python終了に時間がかかる:

« 今年もムラサキシキブの実が、、 | トップページ | HP200LX Cドライブのファイルが壊れた »