4

私は3つのことを同時に行う必要があるPythonスクリプトを作成しています。私がGILについて聞いたことと同じように、これを達成するための良い方法は何ですか?私はもうスレッドを使うことにそれほど傾いていません。
スクリプトが実行する必要のある2つのことは非常にアクティブであり、実行する作業がたくさんあります。次に、ユーザーが要求したときに、ソケットを介してユーザーに報告する3番目のことを実行する必要があります(したがって、小さなもののようになります)サーバー)他の2つのプロセスのステータスについて。
今私の質問は、これを達成するための良い方法は何でしょうか?3つの異なるスクリプトを使用したくありません。また、GILがスレッドを使用しているため、パフォーマンスがあまり向上せず、状況が悪化すると思います。
CのようにPython用のfork()があるので、私のスクリプトから、ジョブを実行するfork 2プロセスと、ユーザーに報告するメインプロセスからですか?そして、フォークされたプロセスからメインプロセスとどのように通信できますか?

LE ::より正確には、1threadはimapサーバーからメールを取得してデータベースに保存する必要があり、別のスレッドは送信する必要のあるdbからメッセージを取得して送信する必要があり、メインスレッドは小さなhttpサーバーである必要があります。 1つのURLを受け入れるだけで、これら2つのスレッドのステータスがjson形式で表示されます。では、スレッドは大丈夫ですか?作業は同時に行われますか、それともギルが原因でパフォーマンスの問題が発生しますか?

4

2 に答える 2

4

スレッドパッケージと同様のAPIを備えたマルチプロセッシングパッケージを使用でき、単一のCPUで複数のコアを使用してパフォーマンスを向上させることができると思います。

スレッド化の代わりにマルチプロセッシングを使用したパフォーマンスの向上を確認するには、マルチプロセッシングxスレッド化を使用した同じプログラムの平均時間比較についてこのリンクを確認してください。

于 2010-01-23T13:33:55.100 に答える
2

GILは、実際には、マルチプロセッシングを実行する場合にのみ注意する必要があります。つまり、負荷が複数のコア/プロセッサに分散されます。それが事実であり、あなたの説明からそれがちょっとそれのように聞こえるなら、マルチプロセッシングを使用してください。

バックグラウンドで何かが起こるのを待つ必要があるように、3つのことを「同時に」行う必要がある場合は、スレッドは問題ありません。そもそもそれがスレッドの目的です。8-I)

于 2010-01-23T14:47:50.510 に答える