많은 HTTP 요청을 보내는 앱이 있습니다. 먼저, 이벤트 릿 및 을 사용하여 요청을 구현합니다. 그러나 성능이 너무 낮습니다. 따라서 다중 프로세스를 사용하여 속도를 높일 것으로 예상됩니다. 알아야 할 사항은 서버가 약 200ms (네트워크 전송 제외)의 단일 요청을 처리하는 것입니다.다중 프로세스가 이벤트 릿을 통해 HTTP 요청을 보내는 속도를 올릴 수없는 이유
그러나 다중 프로세스는 원래 버전보다 느립니다. 나는이 결과에 너무 놀란다! 왜?
코드는 다음과 같습니다. timeit을 사용하여 시간을 측정했습니다.
import eventlet
eventlet.monkey_patch(all=False, socket=True)
import requests
URL = 'http://....'
def send():
pile = eventlet.GreenPile(20)
for x in xrange(100):
pile.spawn(requests.get, URL)
for x in pile:
pass
import multiprocessing
def main():
procs = [multiprocessing.Process(target=send) for _ in range(3)]
for p in procs:
p.start()
for p in procs:
p.join()
import timeit
if __name__ == '__main__':
print timeit.timeit(main, number=1)
나는 완전히 코드를 통해 추론 적이 없다,하지만 당신은'병렬 계산을 수행하기 위해 여러 개의 코어를 프로세스 생성을위한 고가의 선행 비용을 가지고 있지만 수 multiprocessing'을 사용하고,에 I/O 바인딩 문제입니다. 병목 현상이 순전히 I/O 인 경우 스레드가 더 나은 솔루션 일 수 있습니다. – zehnpaard
@zehnpaard, 멀티 스레드를 시도해 본 결과 멀티 프로세스와 동일합니다. 그런 결과에 대한 어떤 생각? – Jacky
사실'eventlet.GreenPile'의'spawn'은 녹색 스레드를 생성합니다. 따라서'eventlet'의 맨 위에 스레드 나 프로세스를 사용하는 것이 중복 될 수 있습니다. 서버에 대한 I/O 요청은 이미 병렬로 처리되고 있습니다. – zehnpaard