반응형
다중 처리 대기열이 파이썬에서 작동하는 방식과 구현 방법을 이해하는 데 많은 문제가 있습니다. 공유 파일의 데이터에 액세스하는 두 개의 파이썬 모듈이 있다고 가정 해 보겠습니다.이 두 모듈을 작성자와 판독기라고합시다. 내 계획은 독자와 작성자 모두 요청을 두 개의 개별 다중 처리 대기열에 넣은 다음 세 번째 프로세스가 이러한 요청을 루프에서 팝하여 실행하도록하는 것입니다.
내 주요 문제는 multiprocessing.queue를 올바르게 구현하는 방법을 정말로 모른다는 것입니다. 각 프로세스에 대해 개체를 실제로 인스턴스화 할 수 없다는 것입니다. 개별 대기열이 될 것이기 때문입니다. 모든 프로세스가 공유 대기열과 관련이 있는지 어떻게 확인합니까? 이 경우 대기열)
해결 방법
내 주요 문제는 multiprocessing.queue를 올바르게 구현하는 방법을 정말로 모른다는 것입니다. 각 프로세스에 대해 개체를 실제로 인스턴스화 할 수 없다는 것입니다. 개별 대기열이 될 것이기 때문입니다. 모든 프로세스가 공유 대기열과 관련이 있는지 어떻게 확인합니까? 이 경우 대기열)
이것은 하나의 큐를 공유하는 리더와 라이터의 간단한 예입니다. 라이터는 리더에게 여러 개의 정수를 보냅니다. 작성자가 숫자가 부족하면 'DONE'을 보내 독자가 읽기 루프를 벗어나는 것을 알 수 있습니다.
from multiprocessing import Process, Queue
import time
import sys
def reader_proc(queue):
## Read from the queue; this will be spawned as a separate Process
while True:
msg = queue.get() # Read from the queue and do nothing
if (msg == 'DONE'):
break
def writer(count, queue):
## Write to the queue
for ii in range(0, count):
queue.put(ii) # Write 'count' numbers into the queue
queue.put('DONE')
if __name__=='__main__':
pqueue = Queue() # writer() writes to pqueue from _this_ process
for count in [10**4, 10**5, 10**6]:
### reader_proc() reads from pqueue as a separate process
reader_p = Process(target=reader_proc, args=((pqueue),))
reader_p.daemon = True
reader_p.start() # Launch reader_proc() as a separate python process
_start = time.time()
writer(count, pqueue) # Send a lot of stuff to reader()
reader_p.join() # Wait for the reader to finish
print("Sending {0} numbers to Queue() took {1} seconds".format(count,
(time.time() - _start)))
참조 페이지 https://stackoverflow.com/questions/11515944
반응형
'파이썬' 카테고리의 다른 글
파이썬 How to check if variable is string with python 2 and 3 compatibility (0) | 2021.02.13 |
---|---|
파이썬 POST 요청을 보내는 방법은 무엇입니까? (0) | 2021.02.13 |
파이썬 Python-주어진 시간에 함수 시작 (0) | 2021.02.13 |
파이썬에서 프로그램 전체에 무작위 시드 설정 (0) | 2021.02.13 |
파이썬 Flask SQLAlchemy 쿼리, 열 이름 지정 (0) | 2021.02.13 |
댓글