ホームページ >バックエンド開発 >Python チュートリアル >Pythonでのマルチプロセス実装を詳しく解説(例付き)
この記事では、Python でのマルチプロセスの実装について詳しく説明します (例付き)。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
fork 関数は子プロセスを作成します
基本的な使用法
Linux オペレーティング システムには、子プロセスを作成するための fork 関数が用意されています。子プロセス。 fork() は Python の os モジュールにあります。
インポートされた OS モジュールを使用するだけです。
import os os.fork()
fork() 関数が呼び出されるたびに、対応する親プロセスが子プロセスを生成します。
たとえば、次のコード:
import os os.fork() os.fork() os.fork()
実行後、8 つのプロセスが生成されます。
fork() 関数の戻り値
子プロセスの fork() 関数の戻り値は常に 0 ですが、子プロセスの戻り値は常に 0 です。親プロセスは子プロセスの PID (プロセス番号) です。
#例#!/usr/bin/env python import os import time rt = os.fork() if rt == 0: print(f"The child process is {os.getpid()} . His father is {os.getppid()}") # os.getpid()获取当前进程进程号,os.getppid()获取当前进程的父进程号 time.sleep(5) else: print(f"The father process is {os.getpid()} . His father is {os.getppid()}") time.sleep(5) print(f"Now the process is {os.getpid()} . His father is {os.getppid()}")実行結果:
##プロセスモジュール
#Import module
Python は、プラットフォーム全体にマルチスレッド プログラミングを提供するマルチプロセッシング ライブラリも提供します。import multiprocessing
簡単なプロセス
次のコードは簡単なプロセスです:
from multiprocessing import Process def work(num): for i in range(10): num += 1 print(num) return 0 def main(): num = 1 p1 = Process(target = work, args = (num,)) p1.start() if __name__ == '__main__': main()
# # ここでは、マルチプロセッシング ライブラリから Process クラスが導入されています。 p1 = Process(target = work, args = (num,)) はプロセスを作成します。 target はタスクを実行する関数であり、args は受け取ったパラメータであり、タプルの形式で指定する必要があります。 start() はプロセスを開始します。
同時処理にはいくつかの方法があります:
結合方法
Processの結合方法はマルチスレッドと似ています。プロセスが終了するのを待っています。 使用法: 参加(タイムアウト)。 join() を使用すると、プログラムはプロセスが終了するのを待ってから次のコードを続行します。
タイムアウトパラメータが追加された場合、プログラムはタイムアウト秒数待機してから次のプログラムの実行を続行します。
close メソッド
close() はプロセスを閉じるために使用されますが、実行中の子プロセスを閉じることはできません。
プロセス クラスクラスを作成することで複数のプロセスを実装できます: from multiprocessing import Process
import time
class My_Process(Process):
def __init__(self,num):
Process.__init__(self)
self.num = num
def run(self):
time.sleep(2)
print(self.num)
def main():
for i in range(10):
p = My_Process(i)
p.start()
if __name__ == '__main__':
main()
from multiprocessing import Pool import time def target(num): time.sleep(2) print(num) def main(): pool = Pool(3) for i in range(3): pool.apply_async(target,(i,)) pool.close() pool.join() print('Finish!!!') if __name__ == '__main__': main()
Pool オブジェクトで join() メソッドを呼び出すと、すべての子プロセスが実行を完了するまで待機します。join() を呼び出す前に Close() を呼び出す必要があります。close() を呼び出した後は、新しいプロセスを追加できません。 Pool(num) の num は、それに追加されるプロセスの数です。プロセス数が指定されていない場合は、デフォルトの CPU コア数が使用されます。
プロセスは互いに独立しています
複数のプロセスの各プロセスは変数のコピーを持ち、プロセス間の操作は相互に影響しません。 import multiprocessing
import time
zero = 0
def change_zero():
global zero
for i in range(3):
zero = zero + 1
print(multiprocessing.current_process().name, zero)
if __name__ == '__main__':
p1 = multiprocessing.Process(target = change_zero)
p2 = multiprocessing.Process(target = change_zero)
p1.start()
p2.start()
p1.join()
p2.join()
print(zero)
最終的な実行結果:
ファイル IO 操作が実行されると、複数のプロセスが同じファイルに書き込みます。
Queueマルチプロセスで Queue を使用すると、異なるプロセスが同じリソースにアクセスできるようになります。 rreeee
以上がPythonでのマルチプロセス実装を詳しく解説(例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。