python은 프로세스나 스레드의 개수를 어떻게 제어합니까
일상적인 개발에서 병발 장면을 만나기 어렵고 병발 장면은 유량 제어를 해야 한다. 즉, 병발 과정이나 라인의 총량을 제어해야 한다.오늘은 두 가지 자주 사용하는 제어 스레드 개수의 방법을 간단하게 총결한다.
방법1: 프로세스 풀/스레드 풀
다음 예제demo에서 보듯이 크기가 4인 프로세스 탱크를 만들고 5개의 프로세스를 만들고 시작합니다
from multiprocessing import Pool
import os, time, random
def long_time_task(name):
print('Run task %s (%s)...' % (name, os.getpid()))
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
print('Task %s runs %0.2f seconds.' % (name, (end - start)))
if __name__ == '__main__':
print('Parent process %s.' % os.getpid())
p = Pool(4)
for i in range(5):
p.apply_async(long_time_task, args=(i,))
print('Waiting for all subprocesses done...')
p.close()
p.join()
print('All subprocesses done.')
실행 결과는 다음과 같습니다. 다섯 번째 프로세스는 연못의 프로세스가 완성된 후에야 시작됩니다.
Run task 0 (32952)...
Run task 1 (32951)...
Run task 2 (32953)...
Run task 3 (32954)...
Task 2 runs 0.68 seconds.
Run task 4 (32953)...
Task 1 runs 1.41 seconds.
Task 0 runs 1.44 seconds.
Task 4 runs 2.15 seconds.
Task 3 runs 2.98 seconds.
All subprocesses done.
방법 2:queuequeue 모듈은 대기열입니다. 특히 여러 개의 스레드 간에 안전하게 교환되는 다중 스레드 프로그램에서 정보를 처리하기에 적합합니다.다음 데모는 queue를 통해 라인의 병렬 개수를 제한하는 방법을 보여 줍니다.
import threading
import queue
import time
import random
import os
maxThreads = 4
class Store(threading.Thread):
def __init__(self, q):
threading.Thread.__init__(self)
self.queue = q
# self.store = store
def run(self):
try:
print('Run task (%s)...' % (os.getpid()))
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
t = threading.currentThread()
# ID
print('Thread id : %d' % t.ident)
print('Thread name : %s' % t.getName())
print('Task runs %0.2f seconds.' % (end - start))
except Exception as e:
print(e)
finally:
self.queue.get()
self.queue.task_done()
def main():
q = queue.Queue(maxThreads)
for s in range(6):
q.put(s)
t = Store(q)
t.start()
q.join()
print('over')
if __name__ == '__main__':
main()
실행 결과는 다음과 같습니다.
Run task (33259)...
Run task (33259)...
Run task (33259)...
Run task (33259)...
Thread id : 123145444999168
Thread name : Thread-13
Task runs 0.04 seconds.
Run task (33259)...
Thread id : 123145394630656
Thread name : Thread-10
Task runs 1.02 seconds.
Run task (33259)...
Thread id : 123145428209664
Thread name : Thread-12
Task runs 1.20 seconds.
Thread id : 123145394630656
Thread name : Thread-17
Task runs 0.68 seconds.
Thread id : 123145444999168
Thread name : Thread-14
Task runs 1.79 seconds.
Thread id : 123145411420160
Thread name : Thread-11
Task runs 2.96 seconds.
over
이상은python이 프로세스나 라인의 개수를 어떻게 제어하는지에 대한 상세한 내용입니다. 더 많은python 제어 프로세스나 라인에 대한 자료는 저희 다른 관련 글에 주목하십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.