質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

0回答

1293閲覧

Windows上のpythonで、SCOOPでの並列実行をする際--hostを指定するとエラーが出てしまう

AkiFuku

総合スコア129

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

1クリップ

投稿2020/11/12 11:57

編集2020/11/13 00:42

前提・実現したいこと

pythonプログラムを複数のPCで並列実行し、分散コンピューティングを実現したいです。
これを試すために2台のPC(AWSのEC2インスタンス、OSはWindows server 2019)を用意しています。
2つのインスタンスはIP固定で、互いに公開鍵によるSSH通信が可能になっており、「ssh test」で接続できるようにしています。

発生している問題・エラーメッセージ

公式サイトの以下のコード(参考:https://scoop.readthedocs.io/en/0.7/examples.html)を、「--host test」を指定して実行するとエラーが出てしまいます。

map_doc.py

1from __future__ import print_function 2from scoop import futures 3 4def helloWorld(value): 5 return "Hello World from Future #{0}".format(value) 6 7if __name__ == "__main__": 8 returnValues = list(futures.map(helloWorld, range(16))) 9 print("\n".join(returnValues))

上記ページのサンプルの通り
python -m scoop -n 8 map_doc.py
でなら正常に実行ができるのですが、
python -m scoop -n 8 --host test map_doc.py
だと下のエラーが出てしまいます。

[2020-11-12 20:30:46,725] launcher INFO SCOOP 0.7 1.1 on win32 using Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)], API: 1013 [2020-11-12 20:30:46,725] launcher INFO Deploying 8 worker(s) over 2 host(s). [2020-11-12 20:30:46,725] launcher INFO Worker distribution: [2020-11-12 20:30:46,725] launcher INFO 54.235.95.26: 3 + origin [2020-11-12 20:30:46,725] launcher INFO .\map_doc.py: 3 + origin ERROR:root:Error while launching SCOOP subprocesses: ERROR:root:Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launch\brokerLaunch.py", line 143, in __init__ self.brokerPort, self.infoPort = ports ValueError: not enough values to unpack (expected 2, got 1) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launcher.py", line 479, in main rootTaskExitCode = thisScoopApp.run() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launcher.py", line 255, in run self.brokers.append(remoteBroker( File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launch\brokerLaunch.py", line 153, in __init__ raise Exception("Could not successfully launch the remote broker.\n" Exception: Could not successfully launch the remote broker. Requested remote broker ports, received: b'' Port number decoding error: not enough values to unpack (expected 2, got 1) SSH process stderr: b'Traceback (most recent call last):\r\n File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main\r\n return _run_code(code, main_globals, None,\r\n File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code\r\n exec(code, run_globals)\r\n File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\broker\__main__.py", line 65, in <module>\r\n sys.stdout.write(str(os.getpgrp()) + "\n")\r\nAttributeError: module \'os\' has no attribute \'getpgrp\'\r\n' [2020-11-12 20:30:47,100] launcher INFO Finished cleaning spawned subprocesses. INFO:launcherLogger:Finished cleaning spawned subprocesses.

試したこと

■.ssh/configの書き換え
http://fx-kirin.com/python/python-scoop/
の方でssh config での host name が ノードの PC の名前かIPでないと、エラーが出るとあったため、.ssh/configのHostをtest→IPアドレスに変更してみましたが、これは意味がありませんでした。(Hostの名前でなくHostNameの話だったのかもしれないです)
■SCOOPインストールのし直し
公式ドキュメントのインストール方法の個所にwindowsの場合はPyzmqをダウンロードページ(https://github.com/zeromq/pyzmq/downloads)でインストールするようにと書いてあったため、そちらでインストールし直しました。
これはpyzmqのバージョンが古いせいかSCOOPインストールの際にmyzmqをアンインストールしようとして、さらにアンインストール処理が失敗したため、結局pip install pyzmqを使いました。
■Windows server 2016でも試す
これも同じエラーが出ました。
sys.stdout.write(str(os.getpgrp()) + "\n")を変更
良くないことと分かってはいますがライブラリの内部のscoop\broker\__main__.pyを書き換えました。
os.getpgrp()でエラーが出ているため、
・エラーの出ないgetpid()に書き換え
・当該行をコメントアウトする
000を返すようにしてみる
などしましたが、全て別種のエラーが表示され失敗しました。
コメントアウトはそもそもの戻り値がないため停止しました。

補足情報

全てAWSのEC2インスタンス上
OS:Windows Server 2019
python:3.9(pyenv, conda等なし)
pyzmqはpipコマンドでインストール
VIsual Studio Build Tools 2019インストール済み
SSH接続 公開鍵通信の設定済み
容量等は無料枠の範囲内で使用

表示されたエラーの
sys.stdout.write(str(os.getpgrp()) + "\n")\r\nAttributeError: module \'os\' has no attribute \'getpgrp\'\r\n''
を調べるとそもそもos.getpgrp()はWindowsでは利用できない(https://docs.python.org/ja/3.5/library/os.html)ようなのですが、SCOOPを使った複数台のPCでの分散はWindowsでは不可能なのでしょうか?
公式ページにインストール手順などがあるので可能なのではと思いたいのですが、何か解決する方法はありませんでしょうか?
すみませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問