2017-10-19 19 views
1

Pythonでクラスのメソッドの中で2つの関数を同時に実行したいと思います。 threadingモジュールを使用しようとしましたが動作しません。私の例のコードは以下の通りです:クラスのメソッド内で2つの関数をスレッド化する

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() 

上記のコードが実行されたら、それだけですべての2のすべて1初とを出力します。しかし、私が欲しいのは、12を同時に印刷することです。従って、所望の出力はそれらが混ざっているべきである。

threadingモジュールはこれを実行できますか?そうでない場合、どのモジュールがそれを行うことができますか?誰かがそれを解決する方法を知っているなら、私に知らせてください。感謝!!

答えて

1

引数を別の方法で渡す必要があります。これで、関数を実行するスレッドを作成する代わりに、実際にはthreading.Thread初期化呼び出しで関数を実行しています。

パラメータとして関数が必要な場合は、常にfunctionを使用します。 function()を書くと、Pythonは実際の関数をパラメータとして渡しませんが、その場で関数を実行し、代わりに戻り値を使用します。

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

ここでは、次のとおりです。

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() 

あなたはこのような出力を取得します:質問がクラス内にすべてをやっていたよう

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

を、私は、これは質問に答えるとは思いませんコンポーネントを作成したり、新しいクラスを作成したりする代わりに、インスタンスを作成することができます。 – Hannu

+0

あなたはポイントがあるように見えますが、私はそれを正しく修正しようとします。 –

関連する問題