day18 요약: 다중 스레드(2019-05-09)
2. 스레드 모듈(threading)
2)current_thread 함수
3) Thread 클래스
5) 인스턴스
import time
from datetime import datetime
import threading #
def download(film_name):
print(' : %s' % film_name, datetime.now())
time.sleep(5)
print('%s ' % film_name, datetime.now())
print(threading.current_thread()) # ,
# a.
t1 = threading.Thread(target=download, args=(' 5',))
# t1 = threading.Thread(target=download, kwargs={'film_name': ' 5'})
t2 = threading.Thread(target=download, args=('007',))
# b.
t1.start()
t2.start()
3. 자신의 라인 클래스 만들기
2)run 구현 방법
5) 인스턴스 1
from threading import *
import time
from datetime import datetime
class DownloadThread(Thread):
def __init__(self, film_name):
super().__init__()
self.film_name = film_name
def run(self):
print(' : %s' % self.film_name, datetime.now())
time.sleep(6)
print(' : %s' % self.film_name, datetime.now())
#
t1 = DownloadThread(' 4')
t2 = DownloadThread(' 7 ')
# start
t1.start()
t2.start()
# t1.run() # run ,
6) 실례2: 서버의 다중 루틴 기능 실현
from socket import *
from threading import *
class ChatThread(Thread):
def __init__(self, connect: socket, address):
super().__init__()
self.connect = connect
self.address = address
def run(self):
while True:
self.connect.send(' , !'.encode())
message = self.connect.recv(1024)
print('%s:%s' % (self.address[0], message.decode(encoding='utf-8')))
connect.close()
server = socket()
server.bind(('10.7.185.82', 8888))
server.listen(512)
while True:
#
connect, address = server.accept()
# ,
t = ChatThread(connect, address)
t.start()
4.join 방법
from threading import Thread
from datetime import datetime
import time
from random import randint
class DownloadThread(Thread):
def __init__(self, name, time):
super().__init__()
self.name = name
self.time = time
def run(self):
print(' :%s' % self.name)
time.sleep(self.time)
print(' :%s' % self.name)
t1 = DownloadThread(' ', 3)
t2 = DownloadThread(' ', 2)
t2.start()
t1.start()
t1.join()
t2.join()
print(' ')
print('=============================')
t1 = DownloadThread(' ', 3)
t2 = DownloadThread(' ', 2)
t2.start()
t2.join()
t1.start()
5. 잠금 사용(Lock)
1) 질문
import time
from threading import Thread, Lock
class Account:
def __init__(self, name, tel, balance=50):
self.name = name
self.tel = tel
self.balance = balance
#
self.lock = Lock()
def save_money(self, money):
print(' ')
#
self.lock.acquire()
value = self.balance
time.sleep(4)
self.balance = value+money
print(' : %.2f' % self.balance)
#
self.lock.release()
def draw_money(self, money):
print(' ')
#
self.lock.acquire()
value = self.balance
time.sleep(5)
if value < money:
print(' ! ')
return
self.balance = value - money
print(' :%.2f' % self.balance)
#
self.lock.release()
acount = Account(' ', '15300022703', 10000)
#
t1 = Thread(target=acount.save_money, args=(1000,))
#
t2 = Thread(target=acount.draw_money, args=(500,))
t1.start()
t2.start()
4) 인스턴스 2
import time
from threading import Thread, Lock
share_data = 1000
lock = Lock()
def add_data(value):
lock.acquire()
global share_data
old_data = share_data
time.sleep(4)
share_data = old_data + value
lock.release()
t1 = Thread(target=add_data, args=(200,))
t2 = Thread(target=add_data, args=(300,))
t1.start()
t2.start()
t1.join()
t2.join()
print(share_data)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.