我需要使用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)