python post提交数据的问题,求助。
本帖最后由 mikaelson 于 2020-10-30 20:14 编辑这是我要post提交的网址https://form.ebdan.net/ls/dLgp6hcG
我抓捕到post的url是https://form-preview-api.eqxiu.com/lp/r/9960193/8488813472?code=dLgp6hcG
于是我就依葫芦画瓢,搞了一段post提交代码。
现在问题是:因为我要做到定时提交。所以我设定了时间去执行插入post语句。结果会出现,时不时的,设定的时间到了,并没有执行,延迟了20秒左右。才打印 “结束时间”。概率性的发生的,网络绝对没问题的。插入的数据也是一条而已,应该不至于被服务器封之类的。所以不知道这个延迟是怎么回事。
我一般都是设定时间的前1-2分钟才执行程序,所以应该不至于是程序运行太久卡死了= =
另外,有更好的解决办法吗?求助。谢谢52里的大神。
import requests
import schedule
import time
import datetime
url='https://form-preview-api.eqxiu.com/lp/r/9960193/8488813472?code=dLgp6hcG'
data={'eq':1,'eq':1,'eq':11111111111,'eq':"不到场"}
def job():
response=requests.post(url,data=data)
print("结束时间:",datetime.datetime.now())
print(response)
print(response.status_code)
print(response.text)
schedule.every().day.at("22:40").do(job)
print("开始时间:",datetime.datetime.now())
while True:
schedule.run_pending()
time.sleep(0.01) 代码没有什么问题,测试也没有什么。
可能原因猜测:
1.While循环中,停顿时间太少,导致CPU等资源消耗太多,程序卡导致
2.请求时网络情况影响(可能性不大)
建议改成如下代码测试(同时输出请求前的时间,并把间隔时间改成1秒):
import requests
import schedule
import time
import datetime
url = 'https://form-preview-api.eqxiu.com/lp/r/9960193/8488813472?code=dLgp6hcG'
data = {'eq': 1, 'eq': 1, 'eq': 11111111111, 'eq': "不到场"}
def job():
print("请求开始时间:", datetime.datetime.now())
response = requests.post(url, data=data)
print("请求结束时间:", datetime.datetime.now())
print(response)
print(response.status_code)
print(response.text)
schedule.every().day.at("22:40").do(job)
print("开始时间:", datetime.datetime.now())
while True:
schedule.run_pending()
time.sleep(1) 很简单,你在post前也打印一下,看看是不是准确时间.
这样就能分析是不是post时候浪费了太多时间.
但是问题应该不是post
而在于schedule这个库, post前的时间如果不是准确的,那说明问题出在schedule这个库上. 个人建议 定时设置在windows定时执行计划里面提前5-分钟,然后在python里面访问北京时间等待,时间未到就睡眠1s,大于就post执行一次 zfzhhh 发表于 2020-10-30 15:13
很简单,你在post前也打印一下,看看是不是准确时间.
这样就能分析是不是post时候浪费了太多时间.
我后来有尝试在post前打印一下时间,其实时间到了,他是有进入函数的。就是post那条语句一直没执行。
这是我早上执行的截图。
我测试的时候设定了10点54分运行。
时间到了之后,函数是执行了。但是post被推迟了21秒左右。
chinaqin 发表于 2020-10-30 15:19
个人建议 定时设置在windows定时执行计划里面提前5-分钟,然后在python里面访问北京时间等待,时间未到就睡 ...
你说的这个问题也是我困扰的,因为要求时间准确,我有点想尝试直接取北京时间,但是我刚初学,还没搞懂怎么以北京时间来执行任务。。。
目前用的是最傻的做法。先把电脑时间跟北京时间同步了,确保误差最小。。。但是现在问题是他居然会延时。。。而且是post那一句延迟。 mikaelson 发表于 2020-10-30 15:34
我后来有尝试在post前打印一下时间,其实时间到了,他是有进入函数的。就是post那条语句一直没执行。
这 ...
那原因不就是post花费时间过长吗,
'服务器花了这么久时间来处理这个post zfzhhh 发表于 2020-10-30 15:39
那原因不就是post花费时间过长吗,
'服务器花了这么久时间来处理这个post
{:1_937:}我觉得不应该啊,就插入一条数据,而且还是可以万级别访问的url。。。我就插1条。。。
高峰的时候,同一个点有几万人同时插都没这么卡过(手动访问页面点提交的做法)。。。
会不会是我没加headers的原因?如果要加headers应该怎么做= = 学习下!!~~ 感觉是你网络的问题啊,我这里都好的,pythonProject/定时任务.py
开始时间: 2020-10-30 15:48:24.400309
结束时间: 2020-10-30 15:49:00.120205 不苦小和尚 发表于 2020-10-30 15:51
感觉是你网络的问题啊,我这里都好的,pythonProject/定时任务.py
开始时间: 2020-10-30 15:48:24.400309
...
我红字有写。
时不时的,设定的时间到了,并没有执行,延迟了20秒左右。才打印 “结束时间”。概率性的发生的,网络绝对没问题的。
网络100M闲置宽带,不会网络有问题的{:1_937:}我排查过了。是闲置的。
所以我一直觉得是不是我代码有问题,我也是半吊子,为了这个post特意去搬了这一段代码。。。