Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在重复请求期间,整个PC网络速度变慢_Python_Performance_Http_Https_Python Requests - Fatal编程技术网

Python-在重复请求期间,整个PC网络速度变慢

Python-在重复请求期间,整个PC网络速度变慢,python,performance,http,https,python-requests,Python,Performance,Http,Https,Python Requests,首先,我不熟悉网络(HTTP通信)和Python 我目前正在使用请求和线程模块定期发送或接收特定站点的数据。目标站点是“”,但我认为这在这里无关紧要 通过下面的示例代码,我让Python每1秒获取一次数据。起初,它工作得相当好。每个请求在我的计算机中大约需要0.07秒 import requests import time import threading url0 = 'https://api.coinone.co.kr/ticker/' class Fetch: def __i

首先,我不熟悉网络(HTTP通信)和Python

我目前正在使用请求和线程模块定期发送或接收特定站点的数据。目标站点是“”,但我认为这在这里无关紧要

通过下面的示例代码,我让Python每1秒获取一次数据。起初,它工作得相当好。每个请求在我的计算机中大约需要0.07秒

import requests
import time
import threading

url0 = 'https://api.coinone.co.kr/ticker/'


class Fetch:
    def __init__(self):
        self.thread = threading.Thread(target=self.fcn)
        self.t0 = time.perf_counter()
        self.period = 1
        self.req0 = None

    def fcn(self):
        while True:
            # headers = None
            headers = {'Connection': 'close'}

            # requests
            t0 = time.perf_counter()
            req0 = requests.get(url0, headers=headers, params={'currency': 'all'})
            resp0 = req0.json()
            self.req0 = req0
            reqTimeInt0 = time.perf_counter() - t0

            # prints
            print('elapsed time: %0.3f' % t0)
            # print(req0.request.headers)
            print(resp0['result'])
            print('requests time interval: %0.3f' % reqTimeInt0)
            print('')

            # timer
            self.t0 += self.period
            now = time.perf_counter()
            sleepInterval = self.t0 - now
            if sleepInterval > 0:
                time.sleep(sleepInterval)
            else:
                while self.t0 - now <= 0:
                    self.t0 += self.period


f1 = Fetch()
f1.thread.start()
导入请求
导入时间
导入线程
url0='1〕https://api.coinone.co.kr/ticker/'
类获取:
定义初始化(自):
self.thread=threading.thread(目标=self.fcn)
self.t0=时间.性能计数器()
self.period=1
self.req0=无
def fcn(自身):
尽管如此:
#标题=无
headers={'Connection':'close'}
#请求
t0=时间。性能计数器()
req0=requests.get(url0,headers=headers,params={'currency':'all'})
resp0=req0.json()
self.req0=req0
reqTimeInt0=时间。性能计数器()-t0
#印刷品
打印('已用时间:%0.3f'%t0)
#打印(需求请求标题)
打印(resp0['result'])
打印('请求时间间隔:%0.3f'%reqTimeInt0]
打印(“”)
#计时器
self.t0+=self.period
now=time.perf_计数器()
sleepInterval=self.t0-现在
如果sleepInterval>0:
时间。睡眠(睡眠间隔)
其他:

self.t0-now使用会话,因为它不会打开新的网络连接,只需使用一个会话即可发出所有请求

有以下首选修改:

class Fetch:
    def __init__(self):
        self.session = requests.Session
        self.thread = threading.Thread(target=self.fcn)
        self.t0 = time.perf_counter()
        self.period = 1
        self.req0 = None

    def fcn(self):
        while True:
            # headers = None
            headers = {'Connection': 'close'}

            # requests
            t0 = time.perf_counter()
            req0 = self.session.get(url0, headers=headers, params={'currency': 'all'})
            resp0 = req0.json()
            self.req0 = req0

            ... other codes goes there ...

在减速瞬间检查
netstat-n
输出。可能是您有太多打开的连接,或者有太多的连接处于FIN_WAIT状态。看起来这不是python的问题,而是系统管理员级别的常见问题。如果停止并重新启动脚本,请求时间是否会立即减少到0.07秒左右?听起来您正在使用的API可能正在限制您的请求。@superhawk610否,它不会减少时间。我必须重新启动才能恢复。@GeorgeShuklin谢谢!我正在检查您评论的网络连接。结果出来后我会通知你的。