Python Big Data Python Advanced (4) Wichtige Punkte im Prozess

Zu beachtende Punkte zum Prozess

Lernziel

  • In der Lage sein, die wichtigsten Punkte des Prozesses zu nennen

1. Einführung in Punkte, die beim Prozess zu beachten sind

  1. Globale Variablen werden nicht von Prozessen gemeinsam genutzt
  2. Der Hauptprozess wartet, bis die Ausführung aller untergeordneten Prozesse abgeschlossen ist, bevor er beendet wird.

2. Globale Variablen werden nicht von Prozessen gemeinsam genutzt

import multiprocessing
import time

# 定义全局变量
g_list = list()


# 添加数据的任务
def add_data():
    for i in range(5):
        g_list.append(i)
        print("add:", i)
        time.sleep(0.2)

    # 代码执行到此,说明数据添加完成
    print("add_data:", g_list)


def read_data():
    print("read_data", g_list)


if __name__ == '__main__':
    # 创建添加数据的子进程
    add_data_process = multiprocessing.Process(target=add_data)
    # 创建读取数据的子进程
    read_data_process = multiprocessing.Process(target=read_data)

    # 启动子进程执行对应的任务
    add_data_process.start()
    # 主进程等待添加数据的子进程执行完成以后程序再继续往下执行,读取数据
    add_data_process.join()
    read_data_process.start()

    print("main:", g_list)

    # 总结: 多进程之间不共享全局变量Copy

Ergebnisse der:

add: 0
add: 1
add: 2
add: 3
add: 4
add_data: [0, 1, 2, 3, 4]
main: []
read_data []Copy

Interpretationsdarstellungen globaler Variablen, die nicht von Prozessen gemeinsam genutzt werden:

Prozessbeziehung

3. Zusammenfassung globaler Variablen, die nicht von Prozessen gemeinsam genutzt werden

  • Durch das Erstellen eines Unterprozesses werden die Ressourcen des Hauptprozesses kopiert, was bedeutet, dass der Unterprozess eine Kopie des Hauptprozesses ist, wie ein Zwillingspaar. Der Grund, warum globale Variablen nicht von Prozessen gemeinsam genutzt werden, liegt in den globalen Variablen Im selben Prozess werden keine Variablen betrieben, aber die Namen globaler Variablen in verschiedenen Prozessen sind gleich.

4. Der Hauptprozess wartet, bis die Ausführung aller untergeordneten Prozesse abgeschlossen ist, bevor er beendet wird.

Wenn wir jetzt einen Unterprozess erstellen, dauert es etwa 2 Sekunden, bis die Ausführung des Unterprozesses abgeschlossen ist. Lassen Sie nun den Hauptprozess 0,5 Sekunden lang ausführen und verlassen Sie dann das Programm, um die Ausführungsergebnisse zu überprüfen. Der Beispielcode lautet wie folgt folgt:

import multiprocessing
import time


# 定义进程所需要执行的任务
def task():
    for i in range(10):
        print("任务执行中...")
        time.sleep(0.2)

if __name__ == '__main__':
    # 创建子进程
    sub_process = multiprocessing.Process(target=task)
    sub_process.start()

    # 主进程延时0.5秒钟
    time.sleep(0.5)
    print("over")
    exit()

    # 总结: 主进程会等待所有的子进程执行完成以后程序再退出Copy

Ergebnisse der:

任务执行中...
任务执行中...
任务执行中...
over
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...Copy

veranschaulichen:

Aus den Ausführungsergebnissen des obigen Codes können wir erkennen, dass der Hauptprozess wartet, bis die Ausführung aller untergeordneten Prozesse abgeschlossen ist, bevor er beendet wird.

Was wäre, wenn wir den Hauptprozess 0,5 Sekunden lang ausführen ließen und der untergeordnete Prozess zerstört und nicht mehr ausgeführt würde?

  • Wir können einen Daemon für den Hauptprozess einrichten oder den untergeordneten Prozess zerstören lassen, bevor der Hauptprozess beendet wird.

Hauptprozess des Wächters:

  • Das Bewachen des Hauptprozesses bedeutet, dass der Hauptprozess beendet wird und die untergeordneten Prozesse zerstört und nicht mehr ausgeführt werden.

Untergeordneter Prozess wird zerstört:

  • Die Ausführung des untergeordneten Prozesses endet

Beispielcode, um sicherzustellen, dass der Hauptprozess normal beendet wird:

import multiprocessing
import time


# 定义进程所需要执行的任务
def task():
    for i in range(10):
        print("任务执行中...")
        time.sleep(0.2)

if __name__ == '__main__':
    # 创建子进程
    sub_process = multiprocessing.Process(target=task)
    # 设置守护主进程,主进程退出子进程直接销毁,子进程的生命周期依赖与主进程
    # sub_process.daemon = True
    sub_process.start()

    time.sleep(0.5)
    print("over")
    # 让子进程销毁
    sub_process.terminate()
    exit()

    # 总结: 主进程会等待所有的子进程执行完成以后程序再退出
    # 如果想要主进程退出子进程销毁,可以设置守护主进程或者在主进程退出之前让子进程销毁Copy

Ergebnisse der:

任务执行中...
任务执行中...
任务执行中...
overCopy

5. Zusammenfassung: Der Hauptprozess wartet, bis die Ausführung aller untergeordneten Prozesse abgeschlossen ist, bevor er beendet wird.

  • Um sicherzustellen, dass die untergeordneten Prozesse normal ausgeführt werden können, wartet der Hauptprozess auf die Ausführung aller untergeordneten Prozesse, bevor er zerstört wird. Der Zweck der Einrichtung des Wächter-Hauptprozesses besteht darin, dass der Hauptprozess beendet und die untergeordneten Prozesse zerstört werden. Damit der Hauptprozess nicht auf die Ausführung der untergeordneten Prozesse wartet .
  • Legen Sie den Hauptprozessmodus des Daemons fest: Unterprozess object.daemon = True
  • Möglichkeit, den untergeordneten Prozess zu zerstören: untergeordneter Prozess object.terminate()

Supongo que te gusta

Origin blog.csdn.net/xianyu120/article/details/133386980
Recomendado
Clasificación