各プロセスの所要時間を調べることができるのだろうかと思います。
たとえば、4人のワーカーがいて、ジョブは10秒を超えてはいけませんが、ワーカーの1人は10秒以上かかります.10秒後にプロセスを終了する方法があります。
私の最初の考えはマネージャーを使っていますが、処理が完了するまで待っているようです。
多くのありがとうございます。Pythonマルチプロセッシング - 各プロセスのステータスを確認してください
答えて
私はこの解決策の時間(StackOverflowのどこかにある)を見つけました。私はそれに非常に満足しています。
基本的には、プロセスが予想よりも多くかかると例外を発生させるためにsignalを使用します。ここで
import signal
class timeout:
def __init__(self, seconds=1, error_message='TimeoutError'):
self.seconds = seconds
self.error_message = error_message
def handle_timeout(self, signum, frame):
raise TimeoutError(self.error_message)
def __enter__(self):
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)
def __exit__(self, type, value, traceback):
signal.alarm(0)
は、それがどのように動作するかの一般的な例である:
あなたがする必要があるすべては、あなたのコードにこのクラスを追加することです、あなたの場合は
import time
with timeout(seconds=3, error_message='JobX took too much time'):
try:
time.sleep(10) #your job
except TimeoutError as e:
print(e)
、私は追加しますあなたの労働者が実行する必要がある仕事への声明。それであなたは例外を捕まえ、あなたはあなたが一番良いと思うことをします。
また、定期的にプロセスが生きているかどうかを確認することができます
timeout = 3 #seconds
start = time.time()
while time.time() - start < timeout:
if any(proces.is_alive() for proces in processes):
time.sleep(1)
else:
print('All processes done')
else:
print("Timeout!")
# do something
あなたのコンテキスト管理機能が作業者機能を変更するようです。それは良いですが、私の期待は作業者の機能には触れていません。 – galaxyan
ワーカー関数を変更することはありませんが、withステートメントの下にワーカー関数をインデントする必要があります。あなたが実際の関数を公開した場合、 'timeout'を使ってその実装を実装しようとすることができます。 –
あなたは、あなたがそれに参加しようとした後、プロセスが生きているかどうかを確認することができます。タイムアウトを設定することを忘れないでください。さもなければ、ジョブが終了するまで待つでしょう。ここで
はあなた
from multiprocessing import Process
import time
def task():
import time
time.sleep(5)
procs = []
for x in range(2):
proc = Process(target=task)
procs.append(proc)
proc.start()
time.sleep(2)
for proc in procs:
proc.join(timeout=0)
if proc.is_alive():
print "Job is not finished!"
- 1. MS CRM:子ワークフローのステータスを確認してください
- 2. バッチファイルのSCHTASKSステータスを確認してください
- 3. Celery workerのステータスを確認してください
- 4. viewDidLoadのUISwitchステータスを確認してください
- 5. 500 +ウェブサイトPythonで複数のステータスを確認してください
- 6. Python:マルチプロセッシングを使用する場合の処理された要素の数を確認してください。
- 7. Pythonマルチプロセッシング。各変数の新しいプロセスを閉じます。
- 8. ipythonの最後のコマンドの終了ステータスを確認してください
- 9. Pythonの変数の状態を確認してください
- 10. 特定のマシンでGearmanワーカーのステータスを確認してください
- 11. プロセスがアイドリングしているかどうかを確認してください。
- 12. Pythonでラクダのケースを確認してください
- 13. PythonとNeo4j:空のstatementresultを確認してください
- 14. sitecustomizeでpythonの対話モードを確認してください
- 15. iPhone - 各ビューがロードされていないか確認してください。
- 16. Pythonのマルチプロセッシング:プロセス
- 17. プロセスがシェルスクリプトで実行されているか確認してください。
- 18. senderEmailAddressを確認してください
- 19. name_suffixを確認してください
- 20. URLを確認してください
- 21. SQL:URLを確認してください
- 22. python bluetooth - 接続状態を確認してください
- 23. プロダクションASP.NETプロセスのステータスを確認
- 24. Bashスクリプトに渡されたフラグとプロセス値を確認してください。
- 25. アプリケーションデータファイルを変更できないプロセスを確認してください
- 26. Pythonマルチプロセッシング - Parrallelプロセス
- 27. 2の累乗でMPIのプロセス数を確認してください
- 28. リストの各項目のヌル値を確認してください
- 29. プロセスがパイプとして実行されているかどうかを確認してください。
- 30. sql:各支店の最低ローン金額を確認してください
UnixやWindowsのための簡単な例ですか? –
@alec_djinn Unix – galaxyan