천봉의 열여덟 번째 날
python에 내장된threading 모듈로 다중 루틴 지원
모든 프로세스는 기본적으로 하나의 루트가 있습니다. (일반적으로 이 루트를 위주로 합니다.) 프로세스에 다른 루트를 추가하려면 루트 대상을 만듭니다.
from threading import Thread
import time
def download(file):
print(' ',file)
time.sleep(5)
print(file,' ')
print('======')
t1 = Thread(target=download, args=[' '])
t1.start()
t2 = Thread(target=download, args=[' '])
t2.start()
print("It's ok now")
# : ,
# :t1 = Thread(target= ,args= ) t1 = threading.Thread(target= ,args= ) t1
# t1.start()
;======
It's ok now
2. 다중 스레드 기술2
방식 2: 루틴 클래스를 하나 씁니다.클래스를 쓰고 Thread 클래스를 계승합니다.런을 다시 씁니다. 하위 라인에서 실행해야 할 내용을 정합니다.하위 라인에서 실행되는 작업에 대응하는 기능을 실현하고 파라미터가 필요하면 클래스의 대상의 속성을 통해 값을 전달합니다
from threading import Thread
import time
class Download(Thread): # Thread, Thread
def __init__(self, file_name): # , ,
super().__init__()
self.name = file_name
def run(self): # ,
print(' ', self.name)
time.sleep(5)
print(self.name, ' ')
t1 = Download(' ') # Download
t1.start() # , start() run
# t1.run() # run , start() ,
t2 = Download(' ')
t2.start()
print('=======')
3. 다중 라인의 응용
서버가 여러 클라이언트에 동시에 접속할 수 있도록 실현
import socket
from threading import Thread
class ConversationThread(Thread):
""" """
"""
python (:), ,
"""
def __init__(self, conversation, address):
super().__init__()
self.conversation = conversation
self.address = address
def run(self):
while True:
message = input(' :')
self.conversation.send(message.encode(encoding='utf-8'))
print(self.address,self.conversation.recv(1024).decode(encoding='utf-8'))
if __name__ == '__main__':
server = socket.socket()
server.bind(('10.7.181.112', 10000))
server.listen(500) # , while conversation address
while True:
conversation, address = server.accept() #accept
t = ConversationThread(conversation, address)
t.start()
만약에 한 임무가 다른 하위 라인에서 끝난 후에 다시 실행하려면 현재 임무를 수행하기 전에 하위 라인 대상으로join 방법을 호출하면join도 라인을 막는다. 대응하는 하위 라인의 임무가 끝날 때까지 막힌다. 일부 작업이 막히려면 join 앞에 놓고 일부 작업이 하위 라인이 끝난 후에 실행해야 한다면 join 뒤에 쓴다.
4. 다선정 원리
프로세스: 시스템에서 실행 중인 프로그램(실행 중인 프로그램만 프로세스), 실행 중인 프로그램만 사용할 수 있는 공간을 개척하고 프로그램은 하드디스크에 저장합니다. 실행할 때만 실행 중인 프로그램을 저장할 수 있습니다. 이때 프로그램은 하나의 프로세스가 됩니다.
루틴이란 무엇입니까: 하나의 프로세스가 임무를 수행하려면 반드시 루틴이 있어야 합니다. 하나의 프로세스 (프로그램) 의 모든 임무는 루틴에서 실행되어야 합니다. 루틴은 프로세스를 수행하는 기본 단원입니다.
단일 스레드: 1개 스레드에서 작업이 실행될 때 직렬 (직렬: 일련의 실행, 즉 하나하나의 실행, 위에서 아래로 실행)
다중 스레드: 하나의 프로세스에서 여러 스레드를 열 수 있으며, 각 스레드는 서로 다른 작업 프로세스를 병행(동시에) 수행할 수 있습니다. ---> 작업장 스레드-----> 작업자
다중 스레드 기술은 프로그램의 집행 효율을 높일 수 있다
단선정은 한 사람이 일하는 것이고, 다선정은 여러 사람이 동시에 일하는 것이다. 총결산: 단선정 직렬, 다선정 병행
다중 스레드의 원리: 같은 시간에 CPU는 하나의 스레드만 처리할 수 있고 하나의 스레드만 작업(실행)에서 다중 스레드가 동시에 실행된다. 사실 CPU는 여러 스레드 사이에서 신속하게 스케줄링(전환)한다. 만약에 CPU가 스레드를 충분히 빨리 스케줄링하면 다중 스레드가 동시에 실행되는 가상을 초래한다.
숙제
# , , pygame
import socket
import pygame
from threading import Thread
import time
def showfont(data):
pygame.init()
screen = pygame.display.set_mode((600, 400))
screen.fill((255, 255, 255))
x = 0
y = 200
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
screen.fill((255, 255, 255))
font = pygame.font.SysFont("simsunnsimsun", 40)
surface = font.render(data, True, (0, 0, 0))
screen.blit(surface, (x, y))
pygame.display.flip()
time.sleep(0.02)
x += 2
class ClientThread(Thread):
def __init__(self, client):
super().__init__()
self.client = client
def run(self):
while True:
send_message = input(' :')
self.client.send(send_message.encode(encoding='utf-8'))
data = self.client.recv(1024).decode(encoding= 'utf-8')
showfont(data)
server = socket.socket()
server.bind(('10.7.181.112', 10000))
server.listen(520)
while True:
client, address = server.accept()
t1 = ClientThread(client)
t1.start()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.