前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单定时和请求 schedrequests

简单定时和请求 schedrequests

原创
作者头像
vanguard
修改2020-06-10 09:57:36
1.2K0
修改2020-06-10 09:57:36
举报
文章被收录于专栏:vanguard

sched 是事件调度器

通过 scheduler 类来调度事件,从而达到定时执行任务的效果。使用标准库中sched模块非常简单。

1. 首先构造一个sched.scheduler类

它接受两个参数:timefunc和 delayfunc。timefunc 应该返回一个数字,代表当前时间;delayfunc 函数接受一个参数,用于暂停运行的时间单元。一般使用默认参数传入这两个参数 time.time 和 time.sleep.也可以自己实现时间暂停的函数。

2. 添加调度任务

scheduler 提供了两个添加调度任务的函数: enter(delay, priority, action, argument=(), kwargs={})

该函数可以延迟一定时间执行任务。delay 表示延迟多长时间执行任务,单位是秒。priority为优先级,越小优先级越大。

两个任务指定相同的延迟时间,优先级大的任务会向被执行。action 即需要执行的函数,argument 和 kwargs 分别是函数的位置和关键字参数。scheduler.enterabs(time, priority, action, argument=(), kwargs={})

添加一项任务,但这个任务会在 time 这时刻执行。因此time是绝对时间.其他参数用法与 enter() 中的参数用法是一致。

3. 把任务运行起来,调用 scheduler.run()函数就完事了

代码语言:python
代码运行次数:0
复制
class Task:
    # initialize schedule
    def __init__(self):
        self.xsched = sched.scheduler(time.time, time.sleep)
    # add/enter task into scheduler # run task
    def _start(self, tsk_fn, delay=1, priority=1):
        self.xsched.enter(delay, priority, tsk_fn)
        self.xsched.run()

requests是使用Apache2 licensed 许可证的HTTP库

用python编写。比urllib2模块更简洁。

Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。

在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。

现代,国际化,友好。

requests会自动实现持久连接keep-alive

代码语言:python
代码运行次数:0
复制
# pip install requests
# https://github.com/requests/requests 
# requests.request()  构造一个请求,支持以下各种方法
# requests.get()      获取html的主要方法            # GET: 请求指定的页面信息,并返回实体主体。
# requests.head()     获取html头部信息的主要方法     # HEAD: 只请求页面的首部。
# requests.post()     向html网页提交post请求的方法   # POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
# requests.put()      向html网页提交put请求的方法    # PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
# requests.patch()    向html提交局部修改的请求
# requests.delete()   向html提交删除请求             # DELETE: 请求服务器删除指定的页面。
# requests.options(“http://httpbin.org/get” )       # OPTIONS请求
# get 和 post比较常见 GET请求将提交的数据放置在HTTP请求协议头中
# POST提交的数据则放在实体数据中

r = requests.get('https://github.com/xiaogift')       # 最基本的不带参数的get请求
# r1 = requests.get(url='http://dict.baidu.com/s', params={'wd': 'python'})      # 带参数的get请求

# r.encoding           # 获取当前的编码
# r.encoding = 'utf-8' # 设置编码
# r.text               # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
# r.content            # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
# r.headers            # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
# r.status_code        # 响应状态码
# r.raw                # 返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()   
# r.ok                 # 查看r.ok的布尔值便可以知道是否登陆成功
# r.json()             # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
# r.raise_for_status() # 失败请求(非200响应)抛出异常

# r.headers            # 返回字典类型,头信息
# r.requests.headers   # 返回发送到服务器的头信息
# r.cookies            # 返回cookie
# r.history            # 返回重定向信息,当然可以在请求是加上allow_redirects = false 阻止重定向

# 文件上传
files = {'file': open('cookie.txt', 'rb')}
response = requests.post("http://httpbin.org/post", files=files)
print(response.text)

# 代理
response = requests.get("https://www.taobao.com", proxies=proxies)
proxies = {'http':'ip1','https':'ip2' }
requests.get('url',proxies=proxies)

# 超时
r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效
from requests.exceptions import ReadTimeout
try:
    response = requests.get("http://httpbin.org/get", timeout = 0.5)
    print(response.status_code)
except ReadTimeout:
 print('Timeout')

# 认证
from requests.auth import HTTPBasicAuth
response = requests.get("http://120.27.34.24:9001/",auth=HTTPBasicAuth("user","123"))
print(response.status_code)

# 会话维持、模拟登陆
# 如果某个响应中包含一些Cookie,你可以快速访问它们:
r = requests.get('http://www.google.com.hk/')
print(r.cookies['NID'])
print(tuple(r.cookies))
# 要想发送你的cookies到服务器,可以使用 cookies 参数:
url = 'http://httpbin.org/cookies'
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
# 在Cookie Version 0中规定空格、方括号、圆括号、等于号、逗号、双引号、斜杠、问号、@,冒号,分号等特殊符号都不能作为Cookie的内容。
r = requests.get(url, cookies=cookies)
print(r.json()) # 需要先import json 
# s = requests.Session()
# s.auth = ('auth','passwd')
# s.headers = {'key':'value'}
# r = s.get('url')
# r1 = s.get('url1') 

# 定制头和cookie信息
header = {'user-agent': 'my-app/0.0.1'}
cookie = {'key':'value'}
r = requests.get/post('your url',headers=header,cookies=cookie) 
data = {'some': 'data'}
headers = {'content-type': 'application/json',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)

遇到网络问题(如:DNS查询失败、拒绝连接等)时,Requests会抛出一个ConnectionError 异常。

遇到罕见的无效HTTP响应时,Requests则会抛出一个 HTTPError 异常。

若请求超时,则抛出一个 Timeout 异常。

若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sched 是事件调度器
    • 1. 首先构造一个sched.scheduler类
      • 2. 添加调度任务
        • 3. 把任务运行起来,调用 scheduler.run()函数就完事了
        • requests是使用Apache2 licensed 许可证的HTTP库
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档