1. threading 모듈
페이지 정보
작성자 관리자 댓글 0건 조회 4,023회 작성일 20-07-22 20:27본문
1. threading 모듈
스레드(Thread)
1개의 프로세스(컴퓨터에서 동작하고 있는 프로그램)는 한가지 일을 하지만, 스레드를 이용하여 2가지 이상의 일을 동시에 수행할 수 있다.
예를 들어 실시간 채팅을 하는 코드를 만들 때, 송신하는 코드와 수신하는 코드를 별개로 작동시킬 수 있다.
threading 모듈 이용. import threading
threading에서 내장 모듈인 Thread를 상속받음.
threading.Thread 클래스를 상속받는 클래스를 만들어서 run() 하여 객체 생성
Thread를 구동하기 위해서는 함수명을 run으로 해야함
MyThread로 생성된 객체를 start() 메소드를 실행할 때 run 메소드가 자동으로 수행.
thread 객체 생성 후 start() 메소드를 통해 thread 객체 실행
target은 스레드로 돌릴 함수, args는 입력 인자.
join() 메소드를 통해 스레드가 끝날 때까지 기다림
import threading, requests, time
def getHtml(url):
resp = requests.get(url)
time.sleep(1)
print(url, len(resp.text), ' chars')
t1 = threading.Thread(target=getHtml, args=('http://google.com',))
t1.start()
print("### End ###")
import threading, requests, time
class HtmlGetter (threading.Thread):
def __init__(self, url):
threading.Thread.__init__(self)
self.url = url
def run(self):
resp = requests.get(self.url)
time.sleep(1)
print(self.url, len(resp.text), ' chars')
t = HtmlGetter('http://google.com')
t.start()
print("### End ###")
import threading
## threading 모듈을 이용
## threading.Thread를 상속받는 클래스를 만들어서 run하여 객체를 생성한다.
class Messenger(threading.Thread):
def run(self):
for _ in range(10):
## 변수를 지정하지 않고 단순 반복을 하고 싶을 때는 _언더바를 사용한다.
print(threading.currentThread().getName())
send = Messenger(name="Sending out Messages")
receive = Messenger(name="Receiving Messages")
send.start()
receive.start()
from threading import Thread
def work(id, start, end, result):
total = 0
for i in range(start, end):
total += i
result.append(total)
return
if __name__ == "__main__":
START, END = 0, 100000000
result = list()
th1 = Thread(target=work, args=(1, START, END, result))
th1.start()
th1.join()
print(f"Result: {sum(result)}")
댓글목록
등록된 댓글이 없습니다.