2017-05-05 12 views
2

私は、APIラッパーであるPrawを使ってレッド・ボットを作っています。私は、コメントと投稿の両方を監視し、応答します。 Prawには新しいコメントと新しい投稿の「ストリーム」があるので、同じ記事に2度返信しないようにする必要はありません。これはfor submission in subreddit.stream.submissions():for comment in subreddit.stream.comments():で行われます。これらの両方は、2つの真のループを作成するように、無限にループします。両方のストリームを同時に監視する最良の方法は何ですか?スレッドを使用する必要がある場合、両方のスレッドが同じ変数にアクセスできるようになりますか?2つ以上の関数を同時に実行すると、同じメモリにアクセスしますか?

好奇心のために:ここに私のコードがあります。 https://github.com/kenblu24/procss-bot

答えて

1

通常、スレッドはプロセス全体のメモリにアクセスできます。これは、プログラミング言語全体で一貫している機能です。

GILのため、Pythonでのマルチスレッドには厳しい制限があります。

少し醜いコードに耐えることができれば、投稿の中の1つの要素、つまりコメントなどからの要素を、順番にwhile Trueループで処理しようとするかもしれません。

+0

導体スレッドを作成してスレッドを一時停止し、メモリアクセスの問題を防ぐことはできますか? – Kevin

+1

他のプログラミング言語で使用するのと同じパターンを使用する必要があります。そのため、導体スレッドを持つことは過度のようです。あなたはロックやその他の同期メカニズムをPythonで持っており、デッドロックや破損状態にならないよう注意しなければなりません。一度に1つのスレッドしかGILを保持できず、Pythonの作業を行うことができます。複数のコアがある場合は、他のスレッドがそれらのコアでスケジュールされていても実行されません。 C#/ Java/C++では、この問題はなく、実際には複数の並列スレッドが実行される可能性があります。 –

関連する問題