Python脚本以高吞吐量进行Http Post调用

时间:2019-02-13 23:27:54

标签: python multithreading multiprocessing

我需要使用python为服务产生最大吞吐量(http调用)。我目前正在重用http连接。

注意-python非常新(使用py3.6)

当我使用单个线程(1)运行ThreadPoolExecutor(1)时,我看到cpu util @ 10%。当我将ThreadPoolExecutor从1增加到10时,我看到cpu util从10%相应增加到100%,这是预期的。但是,如果我进一步增加它,我看不到cpu util的任何明显增加。阅读了一些python文档后,我遇到了GIL,但不确定由于GIL是否会遇到此问题。

其次,我还尝试使用10个thread_pool作为单独的进程手动执行以下代码。但是我注意到,每次创建新进程都会导致平均值。 cpu util进程失败。例如当我启动1进程时,该进程的CPU%= 100。当我启动8个进程时,这些进程的每个内核上的avg cpu util @ @ 50%。我不确定一个过程如何影响另一个过程的性能。

import requests
import json
import logging
from threading import Thread
from concurrent.futures import ThreadPoolExecutor
import os
import multiprocessing

logging.basicConfig(filename='example' + str(os.getpid()) + 
'.log',level=logging.INFO)

urls = '{"headers": {"Accept": "*/*","Accept-Encoding": "gzip, 
deflate","Connection": "keep-alive"},"owner_id": 
"sample","owner_name": "eg@sample.com","urls" : 
["https://mockserver.com"]}'

y = json.loads(urls)

logging.info(y)

py_session = requests.session()
py_session.mount('https://', 
requests.adapters.HTTPAdapter(pool_connections=2000, pool_maxsize=2000))

def thread_post():
    while True:
        try:
            resp = py_session.post("https://myservice/event", json=y)
            logging.info(str(resp.status_code))
        except Exception as e:
            logging.error(e)

executor = ThreadPoolExecutor(10)

for x in range(0, 10):
    future = executor.submit(thread_post)

0 个答案:

没有答案