Table des matières
Créer un seul processus Process (en utilisant func)
Créer un processus unique (en utilisant la classe)
 * Arrêter le processus
Créez directement plusieurs processus
Utiliser le pool de processus pour créer plusieurs processus
Maison développement back-end Tutoriel Python Exemple d'utilisation multi-processus Python (code)

Exemple d'utilisation multi-processus Python (code)

Sep 19, 2018 pm 04:41 PM
python

Le contenu de cet article concerne les exemples d'utilisation (code) du multi-processus Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Le multithreading Python convient aux scénarios gourmands en E/S, mais dans les scénarios gourmands en CPU, les processeurs multicœurs ne peuvent pas être pleinement utilisés. Les coroutines sont essentiellement basées sur des threads et ne peuvent pas exploiter pleinement les avantages du multicœur. .

Pour les scénarios gourmands en calcul qui nécessitent l'utilisation de plusieurs processus, le multitraitement de Python est très similaire au module de threading et prend en charge la création par lots de processus enfants à l'aide d'un pool de processus.

  • Créer un seul processus Process (en utilisant func)

Il vous suffit d'instancier la classe Process et de transmettre la fonction au paramètre cible. C'est le même que le module de threading Très similaire, args est le paramètre de la fonction

import os
from multiprocessing import Process

# 子进程要执行的代码
def task(name):
    print('run child process %s (%s)...' % (name, os.getpid()))

if __name__ == '__main__':
    print('parent process %s.' % os.getpid())
    p = Process(target=task, args=('test',))
    p.start()
    p.join()
    print('process end.')
Copier après la connexion

  • Créer un processus unique (en utilisant la classe)

Héritez la classe Process et remplacez la méthode run pour créer un processus, qui est fondamentalement le même que le module de thread

import multiprocessing
import os
from multiprocessing import current_process
class Worker(multiprocessing.Process):
    def run(self):
        name = current_process().name  # 获取当前进程的名称
        print(&#39;run child process <%s>  (%s)&#39; % (name, os.getpid()))

        print(&#39;In %s&#39; % self.name)
        return

if __name__ == &#39;__main__&#39;:
    print(&#39;parent process %s.&#39; % os.getpid())
    p = Worker()
    p.start()
    p.join()
    print(&#39;process end.&#39;)
Copier après la connexion

 * Arrêter le processus

terminate() termine le processus enfant, mais les ressources du processus enfant ne peuvent pas être libérées. Ceci n'est pas recommandé car l'état d'exécution de l'enfant. le fil n'est pas clair quand il se termine, et il y a de fortes chances que le fil enfant ne soit pas libéré. ​​Le bon moment est terminé.

import multiprocessing
import time

def worker():
    print(&#39;starting worker&#39;)
    time.sleep(0.1)
    print(&#39;finished worker&#39;)

if __name__ == &#39;__main__&#39;:
    p = multiprocessing.Process(target=worker)
    print(&#39;执行前:&#39;, p.is_alive())
    p.start()
    print(&#39;执行中:&#39;, p.is_alive())
    p.terminate()  # 发送停止号
    print(&#39;停止:&#39;, p.is_alive())
    p.join()
    print(&#39;等待完成:&#39;, p.is_alive())
Copier après la connexion

  • Créez directement plusieurs processus

import multiprocessing

def worker(num):
    print(f&#39;Worker:%s %s&#39;, num)
    return

if __name__ == &#39;__main__&#39;:
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()
Copier après la connexion

  • Utiliser le pool de processus pour créer plusieurs processus

Lors de l'utilisation de Python pour la gestion du système, en particulier lors de l'exécution de plusieurs processus en même temps Fichier répertoire ou le contrôle à distance de plusieurs hôtes, les opérations parallèles peuvent faire gagner beaucoup de temps. Lorsque le nombre d'objets à exploiter n'est pas important, vous pouvez utiliser directement Process en multitraitement pour générer dynamiquement plusieurs processus, une douzaine suffisent, mais s'il y a des centaines ou des milliers de cibles, ce serait trop de limiter manuellement. le nombre de processus. S'il est trop lourd, le pool de processus peut être utilisé à ce moment-là.
Le pool peut fournir un nombre spécifié de processus que les utilisateurs peuvent appeler. Lorsqu'une nouvelle demande est soumise au pool, si le pool n'est pas plein, un nouveau processus sera créé pour exécuter la demande, mais si le pool est rempli ; Si le nombre de processus a atteint le maximum spécifié, la requête attendra la fin d'un processus dans le pool, puis un nouveau processus sera créé pour le gérer.

import os
import random
import time
from multiprocessing import Pool
from time import ctime


def task(name):
    print(&#39;start task %s (%s)...&#39; % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)

    print(&#39;end task %s runs %0.2f seconds.&#39; % (name, (time.time() - start)))


if __name__ == &#39;__main__&#39;:
    print(&#39;parent process %s.&#39; % os.getpid())

    p = Pool()  # 初始化进程池
    for i in range(5):
        p.apply_async(task, args=(i,))  # 追加任务 apply_async 是异步非阻塞的,就是不用等待当前进程执行完毕,随时根据系统调度来进行进程切换。

    p.close()

    p.join()  # 等待所有结果执行完毕,会等待所有子进程执行完毕,调用join()之前必须先调用close()
    print(f&#39;all done at: {ctime()}&#39;)
Copier après la connexion

Si vous vous souciez du résultat de l'exécution de chaque processus, vous pouvez utiliser la méthode get qui renvoie le résultat pour l'obtenir. suit

import os
import random
import time
from multiprocessing import Pool, current_process
from time import ctime


def task(name):
    print(&#39;start task %s (%s)...&#39; % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    print(&#39;end task %s runs %0.2f seconds.&#39; % (name, (time.time() - start)))

    return current_process().name + &#39;done&#39;

if __name__ == &#39;__main__&#39;:
    print(&#39;parent process %s.&#39; % os.getpid())

    result = []

    p = Pool()  # 初始化进程池
    for i in range(5):
        result.append(p.apply_async(task, args=(i,)))  # 追加任务 apply_async 是异步非阻塞的,就是不用等待当前进程执行完毕,随时根据系统调度来进行进程切换。

    p.close()

    p.join()  # 等待所有结果执行完毕

    for res in result:
        print(res.get())  # get()函数得出每个返回结果的值

    print(f&#39;all done at: {ctime()}&#39;)
Copier après la connexion

 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'interprète Python peut-il être supprimé dans le système Linux? L'interprète Python peut-il être supprimé dans le système Linux? Apr 02, 2025 am 07:00 AM

En ce qui concerne le problème de la suppression de l'interpréteur Python qui est livré avec des systèmes Linux, de nombreuses distributions Linux préinstalleront l'interpréteur Python lors de l'installation, et il n'utilise pas le gestionnaire de packages ...

Comment résoudre le problème de la détection de type pylance des décorateurs personnalisés dans Python? Comment résoudre le problème de la détection de type pylance des décorateurs personnalisés dans Python? Apr 02, 2025 am 06:42 AM

Solution de problème de détection de type pylance Lorsque vous utilisez un décorateur personnalisé dans la programmation Python, le décorateur est un outil puissant qui peut être utilisé pour ajouter des lignes ...

Comment éviter les problèmes de barre de progression en double causés par l'impression dans TQDM dans Python? Comment éviter les problèmes de barre de progression en double causés par l'impression dans TQDM dans Python? Apr 01, 2025 pm 11:48 PM

Évitez les problèmes de barre de progression en double causés par l'impression dans TQDM dans Python lorsque vous utilisez la bibliothèque TQDM de Python, si vous utilisez l'impression à l'intérieur d'une boucle ...

Comment envoyer la demande de post HTTP / 2 à l'aide de la bibliothèque HTTPX de Python? Comment envoyer la demande de post HTTP / 2 à l'aide de la bibliothèque HTTPX de Python? Apr 01, 2025 pm 11:54 PM

Envoyer HTTP / 2 à l'aide de la bibliothèque HTTPX de Python ...

Python 3.6 Chargement du fichier de cornichon MODULENOTFOUNDERROR: Que dois-je faire si je charge le fichier de cornichon '__builtin__'? Python 3.6 Chargement du fichier de cornichon MODULENOTFOUNDERROR: Que dois-je faire si je charge le fichier de cornichon '__builtin__'? Apr 02, 2025 am 06:27 AM

Chargement du fichier de cornichon dans Python 3.6 Erreur d'environnement: modulenotFounonError: NomoduLenamed ...

FastAPI et AIOHTTP partagent-ils la même boucle d'événements mondiaux? FastAPI et AIOHTTP partagent-ils la même boucle d'événements mondiaux? Apr 02, 2025 am 06:12 AM

Problèmes de compatibilité entre les bibliothèques asynchrones Python dans Python, la programmation asynchrone est devenue le processus de concurrence élevée et d'E / S ...

See all articles