2017-10-19 11 views
1

파이썬에서 동시에 클래스의 메서드 안에 두 개의 함수를 실행하고 싶습니다. threading 모듈을 사용해 보았지만 작동하지 않습니다. 내 예제 코드는 다음과 같습니다 : 위의 코드가 실행 얻을클래스의 메서드 내에서 두 개의 함수 스레딩

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

경우, 그냥 모든 1의 제 모든 2의 인쇄됩니다. 그러나 내가 원하는 것은 12을 동시에 인쇄하는 것입니다. 따라서 원하는 출력은 혼합되어야합니다.

threading 모듈을 사용할 수 있습니까? 그렇지 않다면 어떤 모듈이이를 할 수 있습니까? 누군가 그것을 해결하는 방법을 알고 있다면 알려주십시오. 고맙다 !!

답변

1

다른 인수를 전달해야합니다. 이제 실제로 함수를 실행하는 스레드를 만드는 대신 threading.Thread 초기화 함수에서 함수를 실행하고 있습니다.

매개 변수로 함수가 필요한 경우 항상 function 만 사용하십시오. function()을 쓰면 파이썬은 실제 함수를 매개 변수로 전달하지 않지만 그 자리에서 함수를 실행하고 대신 반환 값을 사용합니다. 여기

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

포인트가있는 것 같아 제대로 수정하려고합니다. –