mikaelson 发表于 2020-10-30 14:50

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)

Love3295292 发表于 2020-10-30 17:29

代码没有什么问题,测试也没有什么。
可能原因猜测:
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)

zfzhhh 发表于 2020-10-30 15:13

很简单,你在post前也打印一下,看看是不是准确时间.
这样就能分析是不是post时候浪费了太多时间.

但是问题应该不是post
而在于schedule这个库, post前的时间如果不是准确的,那说明问题出在schedule这个库上.

chinaqin 发表于 2020-10-30 15:19

个人建议 定时设置在windows定时执行计划里面提前5-分钟,然后在python里面访问北京时间等待,时间未到就睡眠1s,大于就post执行一次

mikaelson 发表于 2020-10-30 15:34

zfzhhh 发表于 2020-10-30 15:13
很简单,你在post前也打印一下,看看是不是准确时间.
这样就能分析是不是post时候浪费了太多时间.



我后来有尝试在post前打印一下时间,其实时间到了,他是有进入函数的。就是post那条语句一直没执行。
这是我早上执行的截图。

我测试的时候设定了10点54分运行。

时间到了之后,函数是执行了。但是post被推迟了21秒左右。

mikaelson 发表于 2020-10-30 15:38

chinaqin 发表于 2020-10-30 15:19
个人建议 定时设置在windows定时执行计划里面提前5-分钟,然后在python里面访问北京时间等待,时间未到就睡 ...

你说的这个问题也是我困扰的,因为要求时间准确,我有点想尝试直接取北京时间,但是我刚初学,还没搞懂怎么以北京时间来执行任务。。。

目前用的是最傻的做法。先把电脑时间跟北京时间同步了,确保误差最小。。。但是现在问题是他居然会延时。。。而且是post那一句延迟。

zfzhhh 发表于 2020-10-30 15:39

mikaelson 发表于 2020-10-30 15:34
我后来有尝试在post前打印一下时间,其实时间到了,他是有进入函数的。就是post那条语句一直没执行。
这 ...

那原因不就是post花费时间过长吗,
'服务器花了这么久时间来处理这个post

mikaelson 发表于 2020-10-30 15:42

zfzhhh 发表于 2020-10-30 15:39
那原因不就是post花费时间过长吗,
'服务器花了这么久时间来处理这个post
{:1_937:}我觉得不应该啊,就插入一条数据,而且还是可以万级别访问的url。。。我就插1条。。。

高峰的时候,同一个点有几万人同时插都没这么卡过(手动访问页面点提交的做法)。。。

会不会是我没加headers的原因?如果要加headers应该怎么做= =

mmattic 发表于 2020-10-30 15:50

学习下!!~~

不苦小和尚 发表于 2020-10-30 15:51

感觉是你网络的问题啊,我这里都好的,pythonProject/定时任务.py
开始时间: 2020-10-30 15:48:24.400309
结束时间: 2020-10-30 15:49:00.120205

mikaelson 发表于 2020-10-30 15:55

不苦小和尚 发表于 2020-10-30 15:51
感觉是你网络的问题啊,我这里都好的,pythonProject/定时任务.py
开始时间: 2020-10-30 15:48:24.400309
...

我红字有写。

时不时的,设定的时间到了,并没有执行,延迟了20秒左右。才打印 “结束时间”。概率性的发生的,网络绝对没问题的。

网络100M闲置宽带,不会网络有问题的{:1_937:}我排查过了。是闲置的。

所以我一直觉得是不是我代码有问题,我也是半吊子,为了这个post特意去搬了这一段代码。。。
页: [1] 2 3
查看完整版本: python post提交数据的问题,求助。