下記のプログラムで、future1、future2、future3の処理はマルチプロセスになると思うのですが、その下のprint文の実行もマルチプロセスになるのでしょうか。例えばfuture2の処理がfuture1よりはやく終わった場合、print(future2.result())が最初に実行されるのでしょうか?それともfuture1の処理の終了を待って、print(future1.result())が実行された後で、print(future2.result())が実行されるのでしょうか?
from concurrent import futures
def top_word(path):
with open(path) as f:
str = f.read()
word_counts = {}
for s in str.split():
if s not in word_counts:
word_counts[s] = 0
word_counts[s] += 1
top = sorted(word_counts.items(), key=lambda v:v[1])[-1]
return top
def main():
with futures.ProcessPoolExecutor() as executor:
future1 = executor.submit(top_word, "./big_file1.txt")
future2 = executor.submit(top_word, "./big_file2.txt")
future3 = executor.submit(top_word, "./big_file3.txt")
print(future1.result())
print(future2.result())
print(future3.result())
if __name__ == "__main__":
main()
No.2
- 回答日時:
補足のコードだったら外側のループは for じゃなくて while len(pending) とする方が良いのではないかと思います。
そうでないなら pending が空の時の futures.wait の挙動は要確認です。No.1ベストアンサー
- 回答日時:
この書き方だとfuture1.result()はfuture1の完了を待ちますね。
1,2,3の順にしか表示できません。終わった順に結果を表示したいならfutures.wait()をreturn_when=FIRST_COMPLETEDで呼び出すとかして並列待ちして、結果が出たものから表示するようにコードを書く必要があります。
なお、このサイトでPythonのコードを書く場合、行頭の空白が削除されるので全角空白を置くなどしてインデントをみえるようにして下さい。
Pythonはインデントが消えると意味を取ることが困難になりますので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- 英語 【 英コミ Amから始まる疑問文 】 問題 Our belongings are the resul 1 2022/07/24 11:52
- 英語 この英文の一部が分かりません。 7 2023/04/16 10:39
- 英語 What are your future plans? の返し方で My future plan i 3 2022/06/09 12:00
- 英語 you gotta trust what’s gonna happen in the future 1 2022/11/12 10:18
- 英語 どういう意味? アメリカ人男性とメールしていて、彼は手作りのパンケーキの写真を送ってきて、美味しそう 8 2023/08/21 22:06
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(プログラミング・Web制作) このpythonコードの意味教えて下さい! 2 2022/08/26 00:52
- 英語 とあるTOEIC教材の文章の構文で教えて頂きたいです 3 2022/05/03 04:06
- 英語 この英語はどんなことを意味していますか? 3 2022/06/29 08:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 電話番号の正規表現について
-
プログラマーと学歴の関係性に...
-
vba クリップボードクリアにつ...
-
このURLで広告を出しているのは...
-
ImageMagickでgif画像の一部が...
-
小学1年生の子です。塾に行かせ...
-
プログラミングのPythonのnoteb...
-
GoogleAppsScript文字列置換の...
-
楽しくて最高のプログラミング...
-
ホワイトハッカー
-
プログラミング ソースコード
-
ものづくりに向いているプログ...
-
大学のゼミのレポートがムカつ...
-
スカラーのベクトル微分
-
初心者powershellのPS1ファイル...
-
Google ColaboでGUI作成
-
プログラミングで例えばゲーム...
-
Powershellとコマンドプロンプト
-
MacのPythonでの開発について
-
Latexに関する質問です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで複数の値を返す良い方法...
-
HASH(0xほげほげ)
-
プロトタイプ宣言のワーニング...
-
Pythonのプログラミングの質問...
-
Net::SSH::Perlについて
-
perlのスクリプトどこが間違っ...
-
print <<"_HTML_"の中でサブル...
-
内部処理形式が日付型 (Date) ...
-
Perlで use strict して our変数
-
変数に値を代入するのに、まずu...
-
Perlで足し算をするには
-
連想配列とforeach
-
Perl:計算誤差について
-
icmp socket error
-
Perlで自分自身の関数名を知る...
-
PERLの「!=」と「=~」 or...
-
[perl] next と return 同じ意...
-
for文の中でのforeachの問題
-
PerlでCabochaを呼び出すには(...
-
Net::Telnetでタイムアウト時間...
おすすめ情報
ごめんなさい。問題の個所は、
def main():
with futures.ProcessPoolExecutor() as executor:
future1 = executor.submit(top_word, "./big_file1.txt")
future2 = executor.submit(top_word, "./big_file2.txt")
future3 = executor.submit(top_word, "./big_file3.txt")
print(future1.result())
print(future2.result())
print(future3.result())
です。
pending = [future1, future2, future3]
for _ in range(3):
done, pending = futures.wait(pending, return_when=FIRST_COMPLETED)
for p in done:
print(p.result())
みたいな書き方でいいんですかね?