miroir de
https://github.com/PAPAMICA/Wiki-Tech.io.git
synchronisé 2024-11-27 03:34:08 +01:00
docs: update Scripting/Python/threading
Cette révision appartient à :
Parent
77d0c5b0b1
révision
9d11bfacaf
1 fichiers modifiés avec 39 ajouts et 6 suppressions
|
@ -2,7 +2,7 @@
|
|||
title: Threading
|
||||
description: Paralléliser les opérations
|
||||
published: true
|
||||
date: 2022-10-11T09:33:35.085Z
|
||||
date: 2022-10-11T09:37:14.419Z
|
||||
tags:
|
||||
editor: markdown
|
||||
dateCreated: 2022-10-11T09:10:42.435Z
|
||||
|
@ -26,8 +26,8 @@ def hello():
|
|||
wait(5)
|
||||
hello()
|
||||
|
||||
>>>j'ai attendu
|
||||
>>>Hello
|
||||
>>> j'ai attendu
|
||||
>>> Hello
|
||||
```
|
||||
Dans ce cas, on doit attendre que la fonction "wait" ait terminé son exécution pour passer à la suite. On va donc créer des threads :
|
||||
```python
|
||||
|
@ -47,8 +47,8 @@ hello = threading.Thread(target=hello)
|
|||
wait.start()
|
||||
hello.start()
|
||||
|
||||
>>>Hello
|
||||
>>>j'ai attendu
|
||||
>>> Hello
|
||||
>>> j'ai attendu
|
||||
```
|
||||
Ici, on voit que la fonction "hello" n'a pas attendu la fin de "wait" pour se lancer.
|
||||
Pour créer le thread, on appelle la fonction *Thread* de la library *threading* (en l'affectant à une variable) avec les arguments suivants :
|
||||
|
@ -56,4 +56,37 @@ Pour créer le thread, on appelle la fonction *Thread* de la library *threading*
|
|||
- args (optionnel) : si la fonction a besoin d'arguments, on les donne ici
|
||||
Ensuite, on lance le thread avec la fonciton *start*
|
||||
> **Attention :** J'attire votre attention sur la virgule après le *2* dans les args. En effet, un tuple est attendu. Si vous n'avez qu'un seul argument à donner, il faut donc mettre une virgule pour indiquer qu'il s'agit d'un tuple.
|
||||
{.is-warning}
|
||||
{.is-warning}
|
||||
|
||||
## Attendre la fin de l'exécution d'un thread
|
||||
Si vous ne voulez pas bloquer tout le programme pour une fonciton, il peut tout de même y avoir des dépendances. Il faudra donc préciser que le thread doit être terminé avant de continuer le script à l'aide de la fonction *join*.
|
||||
Dans cet exemple, la fonction *end* doit être executée en dernier. On indique alors que les threads doivent avoir terminé leur exécution :
|
||||
```python
|
||||
import threading
|
||||
import time
|
||||
|
||||
def wait(duration):
|
||||
time.sleep(duration)
|
||||
print("j'ai attendu")
|
||||
|
||||
def hello():
|
||||
print("Hello")
|
||||
|
||||
def end():
|
||||
print("execution terminée")
|
||||
|
||||
wait = threading.Thread(target=wait, args=(2,))
|
||||
hello = threading.Thread(target=hello)
|
||||
|
||||
wait.start()
|
||||
hello.start()
|
||||
|
||||
wait.join()
|
||||
print_stg.join()
|
||||
|
||||
end()
|
||||
|
||||
>>> Hello
|
||||
>>> j'ai attendu
|
||||
>>> execution terminée
|
||||
```
|
Chargement…
Référencer dans un nouveau ticket