J'ai essayé d'utiliser une bibliothèque (fil conducteur) qui rend le package de threads Python plus facile à utiliser

J'ai essayé d'utiliser une bibliothèque (fil conducteur) qui rend le package de threads Python plus facile à utiliser. https://pypi.org/project/commonthread/ Il est plus précis d'essayer de l'utiliser ou de le fabriquer.

Comment installer

Comment installer le package commonthread


pip install -U commonthread

Classes à installer

Premier échantillon (01.py)

01.py


from commonthread import *


# source https://techacademy.jp/magazine/28155
def fibonacci_worker(th: WorkerThread, n: int):
    if n <= 2:
        return 1
    else:
        return fibonacci_worker(th, n - 2) + fibonacci_worker(th, n - 1)


thread = WorkerThread(fibonacci_worker, 36)
thread.name = 'tfib'
thread.start()
success = thread.join(timeout=0.5)
print('success={}'.format(success))
success = thread.join()
print('success={}'.format(success))
print('result={}'.format(thread.result))
print('elapsed={}'.format(thread.elapsed))
print(thread)

01.résultat d'exécution py


success=False
success=True
result=14930352
elapsed=3.688599109649658
WorkerThread(name=tfib, result=14930352, elapsed=3.688599109649658, args=(36,), kwargs={}, params={})

Explication (01.py)

Parfois, je souhaite renvoyer une valeur de retour à partir d'une fonction de travail, elle est donc optimisée à cette fin.

Exemple de thread basé sur les classes (02.py)

02.py


from commonthread import *


# source https://techacademy.jp/magazine/28155
class FibonacciThread(CommonThread):

    def entry(self, n: int):
        if n <= 2:
            return 1
        else:
            return self.entry(n - 2) + self.entry(n - 1)


thread = FibonacciThread(36)
thread.name = 'tfib'
thread.start()
thread.join()
print('result={}'.format(thread.result))
print('elapsed={}'.format(thread.elapsed))
print(thread)

02.résultat d'exécution py


result=14930352
elapsed=4.399198055267334
FibonacciThread(name=tfib, result=14930352, elapsed=4.399198055267334, args=(36,), kwargs={}, params={})

Commentaire (02.py)

Exemple de thread basé sur une classe qui définit des constructions (03.py)

03.py


from commonthread import *


class AddThread(CommonThread):

    def __init__(self, x: int, y: int):
        CommonThread.__init__(self)
        self.x = x
        self.y = y

    def entry(self):
        time.sleep(2.0)
        return self.x + self.y


thread = AddThread(11, 22)
thread.start()
thread.join()
print('result={}'.format(thread.result))
print('elapsed={}'.format(thread.elapsed))
print(thread)

03.résultat d'exécution py


result=33
elapsed=2.0015878677368164
AddThread(name=Thread-1, result=33, elapsed=2.0015878677368164, args=(), kwargs={}, params={})

Commentaire (03.py)

Exemple à rejoindre avec tous les threads de la même classe (04.py)

04.py


from commonthread import *


lg = CommonThreadLogger()
lg.setup_basic()


class ShortThread(CommonThread):

    def entry(self, duration):
        lg.debug('start')
        time.sleep(duration)
        lg.debug('end')
        return 'finished'


class LongThread(CommonThread):

    def entry(self, duration):
        lg.debug('start')
        time.sleep(duration)
        lg.debug('end')
        return 'finished'


lg.debug('start')

sth1 = ShortThread(1.0); sth1.name = 'sth1'
sth2 = ShortThread(1.5); sth2.name = 'sth2'

lth1 = LongThread(5.0); lth1.name = 'lth1'
lth2 = LongThread(6.0); lth2.name = 'lth2'

sth1.start()
sth2.start()
lth1.start()
lth2.start()

lg.debug(CommonThread.list_alive())

CommonThread.join_all(type=ShortThread)

lg.debug(CommonThread.list_alive())

CommonThread.join_all()

lg.debug(CommonThread.list_alive())

04.résultat d'exécution py


MainThread: start
sth1: start
sth2: start
lth1: start
lth2: start
MainThread: [ShortThread(name=sth1, result=None, elapsed=0.0, args=(1.0,), kwargs={}, params={}), ShortThread(name=sth2, result=None, elapsed=0.0, args=(1.5,), kwargs={}, params={}), LongThread(name=lth1, result=None, elapsed=0.0, args=(5.0,), kwargs={}, params={}), LongThread(name=lth2, result=None, elapsed=0.0, args=(6.0,), kwargs={}, params={})]
sth1: end
sth2: end
MainThread: [LongThread(name=lth1, result=None, elapsed=0.0, args=(5.0,), kwargs={}, params={}), LongThread(name=lth2, result=None, elapsed=0.0, args=(6.0,), kwargs={}, params={})]
lth1: end
lth2: end
MainThread: []

Commentaire (04.py)

finalement

Les fonctionnalités qui n'ont pas pu être introduites cette fois sont:

Recommended Posts

J'ai essayé d'utiliser une bibliothèque (fil conducteur) qui rend le package de threads Python plus facile à utiliser
[Git] J'ai essayé de faciliter la compréhension de l'utilisation de git stash en utilisant un exemple concret.
J'ai essayé de toucher la bibliothèque GUI de Python "PySimple GUI"
J'ai créé un jeu ○ ✕ avec TensorFlow
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
Comment utiliser pip, un système de gestion de paquets indispensable pour utiliser Python
J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
J'ai essayé de créer un système qui ne récupère que les tweets supprimés
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
Début de PyPi J'ai essayé de rendre possible l'installation d'une bibliothèque pour vérifier les vacances japonaises
Je n'aurai plus de difficultés. .. Multi-processus utilisant la bibliothèque standard de Python.
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
Comment utiliser hmmlearn, une bibliothèque Python qui réalise des modèles de Markov cachés
J'ai essayé de comprendre l'arbre de décision (CART) pour classer soigneusement
[Pyto] J'ai essayé d'utiliser un smartphone comme clavier pour PC
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé de dessiner une ligne en utilisant une tortue
Comment installer un package à l'aide d'un référentiel
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai créé une API Web
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
J'ai essayé d'utiliser pipenv, alors prenez note
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai essayé d'utiliser Java avec Termux en utilisant Termux Arch, mais cela n'a pas fonctionné
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
J'ai essayé de créer une fonction de dictionnaire insensible à la casse
J'ai essayé de faire MAP rapidement une personne suspecte en utilisant les données d'adresse Geolonia
J'ai essayé de créer une méthode de super résolution / ESPCN
J'ai essayé de créer une méthode de super résolution / SRCNN ①
J'ai essayé de synthétiser des fichiers WAV en utilisant Pydub.