[解決済み] 関数を並列に実行するには?
2022-04-27 15:28:19
質問
まず調べてみたのですが、答えが見つかりませんでした。Pythonで複数の関数を並列に実行しようとしています。
このようなものがあります。
files.py
import common #common is a util class that handles all the IO stuff
dir1 = 'C:\folder1'
dir2 = 'C:\folder2'
filename = 'test.txt'
addFiles = [25, 5, 15, 35, 45, 25, 5, 15, 35, 45]
def func1():
c = common.Common()
for i in range(len(addFiles)):
c.createFiles(addFiles[i], filename, dir1)
c.getFiles(dir1)
time.sleep(10)
c.removeFiles(addFiles[i], dir1)
c.getFiles(dir1)
def func2():
c = common.Common()
for i in range(len(addFiles)):
c.createFiles(addFiles[i], filename, dir2)
c.getFiles(dir2)
time.sleep(10)
c.removeFiles(addFiles[i], dir2)
c.getFiles(dir2)
func1とfunc2を呼び出して、同時に実行させたい。これらの関数は、互いに、または同じオブジェクト上で相互作用しません。今現在、私はfunc1が終了するのを待ってからfunc2を開始する必要があります。どうすれば以下のようなことができるでしょうか。
process.py
from files import func1, func2
runBothFunc(func1(), func2())
毎分何個のファイルが作成されるかをカウントしているので、両方のディレクトリをほぼ同時に作成できるようにしたいのです。もしディレクトリがなければ、私のタイミングは狂ってしまうでしょう。
解決方法は?
を使用することができます。
threading
または
multiprocessing
.
によるものです。
CPython の特殊性
,
threading
は、真の並列性を達成する可能性は低い。このため
multiprocessing
が一般的です。
以下はその完成例です。
from multiprocessing import Process
def func1():
print 'func1: starting'
for i in xrange(10000000): pass
print 'func1: finishing'
def func2():
print 'func2: starting'
for i in xrange(10000000): pass
print 'func2: finishing'
if __name__ == '__main__':
p1 = Process(target=func1)
p1.start()
p2 = Process(target=func2)
p2.start()
p1.join()
p2.join()
子プロセスを起動したり結合したりする仕組みは、以下のような関数に簡単にまとめることができます。
runBothFunc
:
def runInParallel(*fns):
proc = []
for fn in fns:
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
runInParallel(func1, func2)
関連
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
python string splicing.join()とsplitting.split()の説明
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] 2つの機能を同時に実行させる
-
[解決済み] パイソン 複数の関数を同時に実行する
-
[解決済み] Pythonで並列プログラミングを行うには?
-
[解決済み] [Solved] multiprocessing.Processに渡された関数の戻り値を復元するにはどうすればよいですか?