복붙노트

[PYTHON] 파이썬에서 쓰레드 생성하기

PYTHON

파이썬에서 쓰레드 생성하기

스크립트가 있고 다른 기능과 동시에 한 기능을 실행하고 싶습니다.

예제 코드 나는 보았다 :

import threading


def MyThread ( threading.thread ):

  doing something........

def MyThread2 ( threading.thread ):

  doing something........

MyThread().start()
MyThread2().start()

이 작업을하는 데 문제가 있습니다. 나는 이것이 클래스가 아닌 스레드 된 함수를 사용하는 것을 선호한다.

어떤 도움을 주셔서 감사합니다.

이것은 작업 스크립트입니다. 모든 도움에 감사드립니다.

class myClass():

    def help(self):

        os.system('./ssh.py')

    def nope(self):
        a = [1,2,3,4,5,6,67,78]
        for i in a:
            print i
            sleep(1)


if __name__ == "__main__":
    Yep = myClass()
    thread = Thread(target = Yep.help)
    thread2 = Thread(target = Yep.nope)
    thread.start()
    thread2.start()
    thread.join()
    print 'Finished'

해결법

  1. ==============================

    1.이 작업을 수행하기 위해 Thread의 하위 클래스를 사용할 필요는 없습니다 - 아래에서 간단한 예제를 보면서 아래 게시 방법을 살펴보십시오.

    이 작업을 수행하기 위해 Thread의 하위 클래스를 사용할 필요는 없습니다 - 아래에서 간단한 예제를 보면서 아래 게시 방법을 살펴보십시오.

    from threading import Thread
    from time import sleep
    
    def threaded_function(arg):
        for i in range(arg):
            print "running"
            sleep(1)
    
    
    if __name__ == "__main__":
        thread = Thread(target = threaded_function, args = (10, ))
        thread.start()
        thread.join()
        print "thread finished...exiting"
    

    여기서 스레드 모듈을 사용하여 일반 함수를 대상으로 호출하는 스레드를 만드는 방법을 보여줍니다. 스레드 생성자에서 필요한 인수를 어떻게 전달할 수 있는지 확인할 수 있습니다.

  2. ==============================

    2.코드에 몇 가지 문제가 있습니다.

    코드에 몇 가지 문제가 있습니다.

    def MyThread ( threading.thread ):
    

    함수로만이 작업을 수행하려면 다음 두 가지 옵션이 있습니다.

    스레딩 :

    import threading
    def MyThread1():
        pass
    def MyThread2():
        pass
    
    t1 = threading.Thread(target=MyThread1, args=[])
    t2 = threading.Thread(target=MyThread2, args=[])
    t1.start()
    t2.start()
    

    스레드 :

    import thread
    def MyThread1():
        pass
    def MyThread2():
        pass
    
    thread.start_new_thread(MyThread1, ())
    thread.start_new_thread(MyThread2, ())
    

    thread.start_new_thread 용 문서

  3. ==============================

    3.다른 join ()을 추가하려고 시도했는데 효과가있는 것 같습니다. 여기에 코드가있다.

    다른 join ()을 추가하려고 시도했는데 효과가있는 것 같습니다. 여기에 코드가있다.

    from threading import Thread
    from time import sleep
    
    def function01(arg,name):
    for i in range(arg):
        print(name,'i---->',i,'\n')
        print (name,"arg---->",arg,'\n')
        sleep(1)
    
    
    def test01():
        thread1 = Thread(target = function01, args = (10,'thread1', ))
        thread1.start()
        thread2 = Thread(target = function01, args = (10,'thread2', ))
        thread2.start()
        thread1.join()
        thread2.join()
        print ("thread finished...exiting")
    
    
    
    test01()
    
  4. ==============================

    4.Thread 생성자에서 target 인수를 사용하여 run 대신 호출되는 함수를 직접 전달할 수 있습니다.

    Thread 생성자에서 target 인수를 사용하여 run 대신 호출되는 함수를 직접 전달할 수 있습니다.

  5. ==============================

    5.run () 메서드를 재정의 했습니까? __init__을 오버라이드했다면 기본 threading.Thread .__ init __ ()을 호출했는지 확인 했습니까?

    run () 메서드를 재정의 했습니까? __init__을 오버라이드했다면 기본 threading.Thread .__ init __ ()을 호출했는지 확인 했습니까?

    두 개의 스레드를 시작한 후에도 주 스레드는 자식 스레드가 무기한 작업을 계속하기 전에 끝나지 않도록 주 스레드가 실행을 계속할 수 있도록 자식 스레드에 대한 무기한 / 차단 / 결합을 계속 수행합니까?

    마지막으로 처리되지 않은 예외가 있습니까?

  6. from https://stackoverflow.com/questions/2905965/creating-threads-in-python by cc-by-sa and MIT license