2017-10-19 5 views
1

Je veux exécuter 2 fonctions dans une méthode d'une classe en même temps en Python. J'ai essayé d'utiliser le module threading mais cela ne fonctionne pas. Mes exemples de codes sont comme ci-dessous:Threading deux fonctions à l'intérieur d'une méthode d'une classe Python

import os, sys 
import threading 
from threading import Thread 

class Example(): 
    def __init__(self): 
     self.method_1() 

    def method_1(self): 

     def run(self): 
      threading.Thread(target = function_a(self)).start() 
      threading.Thread(target = function_b(self)).start() 

     def function_a(self): 
      for i in range(10): 
       print (1) 

     def function_b(self): 
      for i in range(10): 
       print (2) 

     run(self) 


Example() 

Si les codes ci-dessus sont exécutées, il suffit d'imprimer d'abord, puis tous les 2 s de tous 1. Cependant, ce que je veux est d'imprimer 1 et 2 en même temps. Ainsi, la sortie désirée devrait être les mélangés.

Le module threading est-il capable de faire cela? Si non, quel module peut faire cela? Si quelqu'un sait comment le résoudre, s'il vous plaît faites le moi savoir. Apprécié !!

Répondre

1

Vous devez transmettre l'argument différemment. Vous exécutez maintenant votre fonction dans l'appel d'initialisation threading.Thread au lieu de créer un thread qui exécute la fonction.

Si quelque chose nécessite une fonction en tant que paramètre, utilisez toujours function. Si vous écrivez function(), Python ne transmettra pas la fonction réelle en tant que paramètre, mais exécute la fonction sur place et utilise la valeur de retour à la place.

def run(self): 
    threading.Thread(target = function_a, args=(self,)).start() 
    threading.Thread(target = function_b, args=(self,)).start() 
0

Ici, il est:

import os, sys 
import threading 
from threading import Thread 
import time 

class Example(): 
    def __init__(self): 
     self.method_1() 

    def method_1(self): 

     def run(self): 
      threading.Thread(target = function_a, args = (self,)).start() 
      threading.Thread(target = function_b, args = (self,)).start() 

     def function_a(self): 
      for i in range(10): 
       print (1) 
       time.sleep(0.01) # Add some delay here 

     def function_b(self): 
      for i in range(10): 
       print (2) 
       time.sleep(0.01) # and here 


     run(self) 


Example() 

Vous obtiendrez des sorties comme ceci:

1 
2 
1 
2 
2 
1 
2 
1 
2 
1 
2 
1 
2 
1 
2 
1 
2 
1 
2 
1 
+0

Je ne pense pas que cela répond à la question, la question était de faire tout à l'intérieur d'une classe instance au lieu d'écrire des composants ou créer de nouvelles classes. – Hannu

+0

On dirait que vous avez un point là-bas, je vais essayer de le modifier correctement. –