2018-08-08day-18

5365 단어
1. 멀티스레드 기술1
python에 내장된threading 모듈로 다중 루틴 지원
모든 프로세스는 기본적으로 하나의 루틴이 있습니다. (일반적으로 이 루틴을 주 루틴이라고 합니다.) 다른 루틴은 하위 루틴이라고 합니다. 프로세스에 다른 루틴을 추가하려면 루틴 대상을 만듭니다.
import threading
import time

def download(file, time1):
    print('    ',file)
    time.sleep(time1)
    print(file, '    ')

if __name__ == '__main__':
    print('abc')

    # 1.      
    """
    target:             
    args:          (       )
       :     
    """
    t1 = threading.Thread(target=download, args=['    ', 10])
    # 2.         
    t1.start()

    t2 = threading.Thread(target=download, args=['   ', 5])
    t2.start()

    # download('    ')
    # download('   ')
    print('=====')

    # t3 = threading.Thread(target=input, args=['>>>'])
    # t3.start()
    value = input('>>>')
    print('!!!!')

2. 멀티스레드 기술2
방식2: 자신의 라인 클래스를 쓴다.클래스를 쓰고 Thread 클래스를 계승합니다.런을 다시 쓰는 방법, 하위 라인에서 수행해야 할 임무를 정합니다.하위 라인에서 실행되는 작업에 대응하는 기능을 실현하고 파라미터가 필요하면 클래스의 대상 속성을 통해 값을 전달합니다
from threading import Thread
import requests
import re



#     
class DownloadThread(Thread):
    """   """
    def __init__(self, file_path):
        super().__init__()
        self.file_path = file_path

    def run(self):
        """run  """
        """
        1.                     
        2.          
        """
        print('    ')
        response = requests.request('GET', self.file_path)
        data = response.content

        #       
        suffix = re.search(r'\.\w+$', self.file_path).group()

        with open('./abc'+suffix, 'wb') as f:
            f.write(data)
        print('    ...')


if __name__ == '__main__':
    print('=====')
    t1 = DownloadThread('http://10.7.181.117/shareX/Git.exe')
    #   start    run  ,run             
    t1.start()
    #     run  ,run              
    # t1.run()

    t2 = DownloadThread('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1533720058151&di=766b5c97653351e805c85881ecaa57d0&imgtype=0&src=http%3A%2F%2Fx.itunes123.com%2Fuploadfiles%2Fb2ab55461e6dc7a82895c7425fc89017.jpg')
    t2.start()

    print('!!!!!')

3. 멀티스레드 어플리케이션
하나의 서버를 구축하여 여러 개의 클라이언트 정보를 수신하는 것을 실현하다
import socket
from threading import Thread


class CoversationThread(Thread):
    """               """
    """
    python                ,           
    """
    def __init__(self, conversation:socket.socket, address):
        super().__init__()
        self.conversation = conversation
        self.address = address

    def run(self):
        while True:
            self.conversation.send('  !'.encode())
            print(self.address,self.conversation.recv(1024).decode(encoding='utf-8'))



if __name__ == '__main__':

    server = socket.socket()
    server.bind(('10.7.181.99', 8080))
    server.listen(512)

    while True:

        conversation, address = server.accept()
        t = CoversationThread(conversation, address)
        t.start()

다음은 클라이언트
import socket
client=socket.socket()
client.connect(('10.7.181.99',8001))
while True:
    data=client.recv(1024)
    print(data.decode(encoding='utf-8'))
    x=input('>>>')
    client.send(x.encode())

4.join 함수
from threading import Thread,currentThread
import time
from random import randint


class Download(Thread):
    def __init__(self, file):
        #      init      ,                   
        super().__init__()
        self.file = file

    def run(self):
        print(currentThread())
        print('    :%s' % self.file)
        time.sleep(randint(5, 10))
        print('%s    ' % self.file)



if __name__ == '__main__':

    # time.time():       -   
    start_time = time.time()
    t1 = Download('  Z.mp4')
    t1.start()

    t2 = Download('  A.mp4')
    t2.start()

    print('====')
    #       
    """
       : MainThread
       : Thread-  (   1  。)
    """
    print(currentThread())

    #                             ,               join  
    #   join      ,                 
    t1.join()

    # t2.join()
    end_time = time.time()
    print('      :%.2f' % (end_time - start_time))

작업 시간 소모
1. 운영 스레드에 시간 소모 작업: 운영 스레드에 시간 소모 작업을 넣으면 여러 개의 시간 소모 작업이 한 스레드에 실행되는 것을 막는다. 최종 실행 시간은 두 개의 시간 소모 작업의 시간과
2. 문제를 어떻게 해결합니까?다중 스레드 사용(다중 스레드 생성)
import pygame
from random import randint
import time
def rand_color():
    return randint(0, 255),randint(0, 255),randint(0, 255)

def long_time():
    print('      ')
    time.sleep(10)
    print('      ')

def download(file):
    print('    ',file)
    time.sleep(10)
    print(file, '    ')

if __name__ == '__main__':
    print('====')
    print(time.time())
    download('   ')
    download('    ')
    print(time.time())
    print('!!!')

좋은 웹페이지 즐겨찾기