Python의 Threadpool 스레드 풀 작업 종료 샘플 코드에 대한 자세한 설명

高洛峰
풀어 주다: 2017-03-20 13:09:56
원래의
4183명이 탐색했습니다.

요구 사항

홀수인 경우 일련의 한 자리 숫자(0~9)를 처리해야 하며, 홀수인 경우 루프 해야 합니다. 짝수이면 해당 시간을 기다렸다가 모든 작업을 완료합니다. 0이면 오류이지만 작업을 종료할 필요는 없으며 일부 처리를 사용자 정의할 수 있습니다.

핵심 사항

func 정의함수처리 요구 사항

콜백 처리 결과는 짝수와 0만 반환되며, 항상 홀수만 반환됩니다. ; 스레드 제어가 필요합니다. 풀 상태 , 짝수 및 0번 에 대해 예외 를 발생시키고 예외 처리를 캡처해야 합니다.

threadpool 정의 스레드 풀 동시성

구현

# -*- coding: utf-8 -*-
from threadpool import makeRequests, ThreadPool
import time
from multiprocessing import Process
로그인 후 복사

예외 정의 및 특수 값(0) 정의

class Finish(SyntaxWarning):
    pass
로그인 후 복사
class PauseInfo(SyntaxWarning):
    pass
pause_num = 0
로그인 후 복사

func 함수 정의

0이면 False 반환, 다른 짝수는 True 반환

def func(para):
    if para == pause_num:
        print('start for %d and wait %ds' % (para, 4))
        time.sleep(4)
        print('error bcs ',para)
        return False
    if para % 2 == 0:
        print('start for %d and wait %ds' % (para, para))
        time.sleep(para)
        print('stop for', para)
        return True
    while True:
        print('continue for', para)
        time.sleep(para)
로그인 후 복사

콜백 정의

def callback(request, result):
    if result:
        raise Finish
    else:
        raise PauseInfo
로그인 후 복사

스레드 풀 처리

Finish는 작업 완료를 표시하고 다시 예외를 발생시켜 종료하도록 유도합니다. 스레드 풀 처리;

def main_thread(paras):
    pool = ThreadPool(10)
    requests = makeRequests(callable_=func, args_list=paras, callback=callback)
    [pool.putRequest(req) for req in requests]
    while True:
        try:
            pool.wait()
        except Finish as e:
            raise SystemExit
        except PauseInfo as e:
            print('Pause bcs %d but will continue' % pause_num)
        except Exception as e:
            print('Unknown error so will quit')
            raise SystemExit
로그인 후 복사

메인 함수는 테스트 프로세스를 시작합니다

if name == 'main':
    while True:
        s = input('Input number list to test and any other word to quit\n')
        paras = []
        for para in s:
            if para.isnumeric():
                paras.append(int(para))
            else:
                break
        try:
            thread_test = Process(target=main_thread, args=(paras,))
            thread_test.start()
            thread_test.join(timeout=20)
        except TimeoutError as e:
            print('task timeout')
        except Exception as e:
            print('unknow error:',e)
로그인 후 복사
 
로그인 후 복사

결과 확인

108을 처리하면 1이 루프에서 처리되는 것을 인쇄에서 볼 수 있습니다. , 0이 처리되면 오류가 보고됩니다. 8이 처리되고 작업이 종료됩니다

테스트할 번호 목록과 종료할 다른 단어를 입력하세요
108
1 동안 계속
0 및 4초 대기
8초 시작 및 8초 대기
1 동안 계속
1 동안 계속
1 동안 계속
error bcs 0
1 동안 계속
bcs 0을 일시 중지하지만 계속
1 동안 계속
1 동안 계속
1 동안 계속
1 동안 계속
8 동안 중지
테스트할 번호 목록과 종료할 다른 단어 입력

위 내용은 Python의 Threadpool 스레드 풀 작업 종료 샘플 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿