>  기사  >  백엔드 개발  >  Python의 간단한 스레드 및 코루틴 예제에 대한 자세한 설명

Python의 간단한 스레드 및 코루틴 예제에 대한 자세한 설명

PHP中文网
PHP中文网원래의
2017-06-21 16:49:201515검색

파이썬에서 스레드에 대한 지원은 사실 충분하지 않습니다. 하지만 파이썬에는 완전한 비동기 네트워크 프레임워크 모듈이 있다고 합니다. 다음은 파이썬에서 스레드에 대한 간단한 요약입니다.

별도의 스레드에서 사용됩니다. 임의의 Python 호출 가능 개체를 실행합니다. 이 모듈은 스레드 관련 작업에 대한 지원이 충분하지 않지만 간단한 스레드를 사용하여 I/O 작업을 처리하여 프로그램 응답 시간을 줄일 수 있습니다.

from threading import Thread
import time


def countdown(n):
    while n > 0:
        print('T-minus:', n)
        n -= 1


t = Thread(target=countdown, args=(10,))
t.start()  # 开启线程

time.sleep(2)

if t.is_alive() is True:
    print("停止线程...")
    t._stop()  # 停止线程

start 함수는 스레드를 시작하는 데 사용되며 _stop 함수는 스레드를 중지하는 데 사용됩니다. 스레드에서 I/O 작업을 수행할 때 차단되는 등의 문제를 방지하려면 일정 시간 동안 실행한 후 스레드가 여전히 존재하는지 확인하면 _stop()을 호출하여 중지할 수 있습니다. 차단을 방지합니다(_stop 함수를 클래스에 캡슐화할 수 있지만 여기서는 그렇게 하지 않았습니다).

물론 스레드를 수동으로 생성하는 대신 ThreadPool 스레드 풀을 호출하여 이를 처리할 수 있습니다. 스레드 간에 변수를 공유할 필요가 없다면 스레드를 사용하는 것이 매우 편리하므로 번거로운 작업을 많이 줄이고 시간을 절약할 수 있습니다. 스레드 간에 통신해야 하는 경우 대기열을 사용하여 이를 달성할 수 있습니다.

from queue import Queue
from threading import Thread


class kill:
    def terminate(self, t):
        if t.isAlive is True:
            t._stop()


def product(out_q):
    for i in range(5):
            out_q.put(i)


def consumer(in_q):
    for i in range(5):
        print(in_q.get())


q = Queue()
t1 = Thread(target=consumer, args=(q,))
t2 = Thread(target=product, args=(q,))
t1.start()
t2.start()


k = kill()  # 查询线程是否终止,防止阻塞...
k.terminate(t1)
k.terminate(t2)

 

큐 인스턴스는 모든 스레드에서 공유되며 동시에 필요한 모든 잠금 기능을 갖추고 있으므로 안전하게 사용할 수 있습니다. 스레드에서 공유되는 스레드 수에 관계없이. 멀티 스레드에서 put() 및 get() 메서드 이외의 대기열 클래스 메서드를 사용하지 않도록 주의하십시오. 이는 멀티 스레드 환경에서는 신뢰할 수 없기 때문입니다! 스레드에서 간단하고 소규모의 데이터 통신을 위해 큐를 사용할 수 있습니다. 대용량 데이터에 대화형 통신이 필요한 경우 Python은 사용할 수 있는 관련 모듈을 제공합니다. 특히 Baidu가 필요합니다.

소위 코루틴은 실제로 단일 스레드 환경의 Yield 프로그램입니다.

from collections import deque


def countdown(n):
    while n > 0:
        print("T-minus", n)
        yield  # 返回之后下次直接从这里执行...相当于C#里面得yield return .
        n -= 1
    print("this is countdown!!!")


def countup(n):
    x = 0
    while x < n:
        print("Counting up", x)
        yield
        x += 1


class TaskScheduler:
    def __init__(self):
        self._task_queue = deque()

    def new_task(self, task):
        self._task_queue.append(task)

    def run(self):
        while self._task_queue:
            task = self._task_queue.popleft()
            try:
                next(task)
                self._task_queue.append(task)
            except StopIteration:
                pass


sche = TaskScheduler()
sche.new_task(countdown(10))
sche.new_task(countdown(5))
sche.new_task(countup(15))
sche.run()

이 기간 동안 Python을 사용한 경험을 공유하고 싶습니다. Python은 정말 좋지만 성능도 비판을 받고 있습니다. Python을 처음 배우기 시작했을 때, 적어도 들리는 대로 멋진 프로그램을 만들었습니다. Python의 자연어 처리를 사용하여 감정 분석 및 가장 인기 있는 크롤러 프로그램을 수행하고 멋진 데이터 분석 차트를 만드는 것과 같은 고급 기능입니다. 프로그램의 초점이 그것들에 있지 않기 때문에 점차적으로 그것들을 버립니다. 기본 구문을 알고 공식 문서를 이해하는 한 프로그램 코드의 초점은 성능과 최적화에 있습니다. 가능한 한 가장 완전한 기능, 최고의 성능, 가장 아름다운 구조를 갖춘 프로그램을 작성하십시오. 사실 이것은 정치 교사들이 흔히 말하는 '문화 소프트 파워'와 비슷합니다. 프로그램에는 가장 적합한 디자인 패턴, 가장 완벽한 프로그램 최적화, 가장 성능 효율적인 데이터 구조 등이 포함되어야 합니다.

위 내용은 Python의 간단한 스레드 및 코루틴 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.