python 간단 한 스 레 드 와 협동 학습 소감(공유)

python 에서 스 레 드 에 대한 지원 이 부족 합 니 다.그러나 python 은 충분 한 비동기 네트워크 프레임 워 크 모듈 이 있다 고 합 니 다.나중에 배 울 수 있 기 를 바 랍 니 다.여기 서 python 의 스 레 드 를 간단하게 정리 하 겠 습 니 다.
threading 라 이브 러 리 는 단독 스 레 드 에서 임의의 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)
Queue 인 스 턴 스 는 모든 스 레 드 에 공유 되 고 필요 한 자 물 쇠 를 모두 가지 고 있 기 때문에 여러 스 레 드 에서 안전하게 공유 할 수 있 습 니 다.다 중 스 레 드 에서 put(),get()방법 을 제외 한 quue 류 의 방법 을 사용 하지 않도록 주의해 야 합 니 다.다 중 스 레 드 환경 에서 이것 은 믿 을 수 없 기 때 문 입 니 다!간단 한 소형 스 레 드 에서 데이터 통신 은 대기 열 로 처리 할 수 있 습 니 다.만약 대형 데이터 가 상호작용 통신 이 필요 하 다 면 python 은 관련 모듈 을 제공 합 니 다.구체 적 인 u need 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 간단 한 스 레 드 와 협 정 학습 소감(공유)은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기