私はPythonとマルチスレッドの両方に新しいです。 Pythonスレッドは、実行中の関数が '返す'ときに終了します。私のプログラムが無限のスレッドを回転させているのではないかと心配すべきですか?私のコードはスレッドを繁殖させますか?
ため、私は時々、HTTPリクエストがタイムアウト尋ねることだし、それは(予想)のエラーがスローされます。
Exception in Thread-44
エラーが私の心配ではなく、スレッドの数です。これは実際に44のスレッドがあることを意味しますか、これは単純に44番目のスレッドです(ただし、前の43は優雅に閉じられています)。
コード:
def start(self, error_refresh=None):
self.timeout_id = GLib.timeout_add_seconds(10, self.check_price)
def stop(self):
if self.timeout_id not 0:
GLib.source_remove(self.timeout_id)
def check_price(self):
self.async_get(URL, callback=self._parse_result)
return True
def async_get(self, *args, callback=None, timeout=15, **kwargs):
if callback:
def callback_with_args(response, *args, **kwargs):
callback(response)
kwargs['hooks'] = {'response': callback_with_args}
kwargs['timeout'] = timeout
thread = Thread(target=requests.get, args=args, kwargs=kwargs)
thread.start()
def _parse_result(self, data):
## code for parsing here
GLib.idle_add(self.indicator.set_data,label, bid, high, low, ask, vol)
ありがとう、これは将来のコードの最適化に役立ちます。これまでに実行されているスレッドの数を示す関数が見つかりました。一度に4つしかないとは限りませんが、スレッドがまだタイムアウトに達していないのにタイマが既に別のスレッドをスピンアップしている場合、その数を超えることがあります。私はリフレッシュ間隔にもタイムアウトを設定することができました。とにかく私は8を超えることはありませんでした。つまり、スレッドは正しく終了していて、番号は単なるIDですが、実行中のスレッドの数は示されていません。 – bluppfisk
最も優れています!あなたのスレッドをID /カウントする方法を見つけられたらうれしいです。解決策を見いだすための帽子: – bedwyr
:Dまた、完全性のために、関数はthreading.active_count()です。 – bluppfisk