CPU一個しか使わないのはもったいない。

ゲーム制作とか考えるとそう思っちゃいますね。もう少し自由度をあげたいな。


 

マルチスレッドだとメモリ共有可能。

 

Pythonのマルチスレッドはメモリ共有出来るけどCPUも共有させられる。

これはpythonインタプリターの限界。オブジェクト管理が柔軟なだけに難しい。

この限界を突破するにはpythonCPUとOSが必須でしょう。

 

マルチプロセスはお互い無関係に動ける。他人の関係なら便利。

逆に連携が必要ならなんらかのプロセス間通信が必要。

マルチプロセスを売りにする言語ならライブラリーが準備される。

 

マルチスレッドでもそこそいける。

大量のトランザクションを扱う場合は非同期が楽。ネットから大量にデータ収集したい時は必須。ネットはサーバー側で転送量をコントロールしてるから受け口を多くしないと単位時間で沢山受け取れない仕組み。パソコンのダウンロードアプリはこの構造になってる。GoogleChromeが5個迄に制限してるのでブラウザーは右に倣え。

普通にあるGUIアプリならPythonのGILロックは気になりません。

大抵の処理はクリックされた処理が終わったらボタンのロックが外れて次の処理を受け付けるタイプ(逐次処理)。アプリがバグったら画面はロック。

動画編集等の高度なGUIアプリになると同時に複数の処理が行えるものもある。EVのGUIなんかは動画編集レベルの高度なGUIを装備してほしいね。画面ロックとか起こさないために。

 

CPUバウンドの処理が含まれる場合はGILロックでGUIが働かなくなるので

マルチプロセスが必須となるでしょう。

 

親子の関係なら子プロセスを立ち上げる時には持参金と通信手段が必要です。

具体的には親が持ってる情報のコピーは渡したいし、適宜な情報交換もしたい。

 

手っ取り早いのは、データーベースを介することです。

入力となるデータをデータベースにセットして子プロセスを動かして結果をデータベース経由で受け取る。データベースはその性質上プロセス間通信に対応しかつロック機能を有する。次のような処理構造で考える時、

親が持ってるメモリ情報を子にどうやって伝えるのが課題になります。

データベースに出来ないデータ型もあります。

pythonメモリはオブジェクト構造です。子プロセスが動くときに継承できれば、まさにオブジェクト指向と言えます。

実に都合が良い事にオブジェクト継承に使えるツールがpythonにはあります。

]

オブジェクトはpickleで外部メモリにー出せる。

例えばアプリで使うデータをすべて一つのデータクラスで管理するとします。

このデータクラスをファイルに書き出して、子プロセスが動き始める時にロードすれば親プロセスの持ってたデータを継承出来る事になります。

 

この方法だとデータベースに書けない情報も簡単に継承できる。

pythonではソースコードはimportしたものしか処理しないので、pickleでは継承できません。子プロセスは親プロセスと同じコードをimportする必要があります。

実際には、まずクラスを定義。オブジェクトになる関数とデータを定義。

クラス内変数(dotworld)にインスタンスを定義。

ファイルに書き出します。

子プロセスでオブジェクトをロード。プロセスでこのインスタンスが使えれば成功。

ロードしたインスタンスを使う。

さてどうなるでしょうか?

 

オブジェクトの外部化ってのはアプリの性能アップにかなり効果あります。

GUIアプリだと前処理で同じ事をする局面が多いです。

そういう時はキャッシュ化で早くなる。DBを読んでテーブルをオブジェクトとして準備したらそれを保存して次のキャッシュとして使う事で前処理の時間が稼げる。

キャッシュをオンメモリーファイルに置けば瞬速です。

 

処理を速くするのは色んな方法があります。創意工夫が面白いのです。

趣味だから深くできる面はありますね。お仕事で危ない提案は出来ません。

pythonはまだまだ隠し玉もってますからね。発掘していきましょう。

 

マルチプロセスは適当なネタが無いのでアイデア止まりで実装に至ってません。

pythonはソースコードはオブジェクト実体として保存しないので、

逆に子プロセスでは関数の中身を入れ替える事が出来ます。オブジェクト指向で言ううオーバーロード。親が作った枠組みを使い子に少しずつ違った処理を処理させる。

そんな並列演算に使えます。個人レベルではそんなデータは持ってませんけどあるとしたら画像関係でしょう。

親は子プロセスが作成したオブジェクトを合成して完成させる。

そんな処理モデル。

 

pythonは個人がプログラムを楽しむのに手軽で良い言語です。

でも本格ゲームアプリ作るなら UEでC#。てな感じで枠組みがだいたい決まってます。

その枠組みから外れるとお金にならない。

 

アウトソースで開発する日本企業はコードが財産なのでPythonは使えない。

pythonで書いたらフリーソフト同然ですからね。

プログラマーが財産。コードは消耗品。python使うところはそのへんはわきまえてるんでしょう。それでも高給を払う。日本の常識は世界の非常識。

でも日本人の特性は活かすべきだと思います。薄給であっても。