重写线程(threading)
import threading
import time
class WMThread(threading.Thread):
def __init__(self, download_url,time):
super(WMThread, self).__init__()
self.download_url = download_url
self.time = time
def run(self):
print("run",self.download_url)
time.sleep(self.time)
print("end",self.download_url)
pass
pass
t = WMThread("http://www.baidu.com",5)
t.start()
print(t.ident,t.is_alive())
实例1:分线程异步请求数据
import threading, requests,json,queue
class WMRequestThread(threading.Thread):
def __init__(self, request_type, download_url, datajson,callback):
"""
初始化
:param request_type: get or post
:param download_url: request url
:param datajson: input json data
:param callback: callback respon text
"""
super(WMRequestThread, self).__init__()
self.request_type = request_type.lower()
self.download_url = download_url
self.datajson = datajson
self.callback = callback
def run(self):
print("run",self.download_url)
data_respon = ""
if self.request_type == "get":
data_respon = self.request_get(self.download_url,self.datajson)
elif self.request_type == "post":
data_respon = self.request_post(self.download_url, self.datajson)
self.callback(data_respon)
pass
def request_get(self,url, data_json):
"""
get request
:param url: request url
:param data_json: inout params eg:data_json = {'mobile':username , 'site': siteid}
:return: respon text
"""
try:
print(url, data_json)
respon = requests.get(url, params=data_json)
print("respon==",respon.text)
data_respon = respon.text
except:
data_respon = ""
# print("error")
finally:
print(data_respon)
return data_respon
def request_post(self, url, data_json):
"""
post request
:param url: request url
:param data_json: input params eg: data_json = {'mobile':username , 'site': siteid}
:return: respon text
"""
try:
print(url, data_json)
respon = requests.post(url, data=data_json)
print(respon)
try:
data_respon = respon.text
pass
except:
data_respon = ""
pass
finally:
print(data_respon)
except:
pass
finally:
print(data_respon)
return data_respon
pass
if __name__ == '__main__':
def get_respon_value(value):
print("value==",value)
data_json = {'mobile':"xiaoming" , 'site': "11"}
t = WMRequestThread("get","http://www.weather.com.cn/data/sk/101190408.html",data_json,get_respon_value)
t.start()
使用 multiprocessing的Pool实现
from multiprocessing import Process, Pool
import multiprocessing
import requests
def request_get(url, data_json):
"""
get request
:param url: request url
:param data_json: inout params eg:data_json = {'mobile':username , 'site': siteid}
:return: respon text
"""
try:
print(url, data_json)
respon = requests.get(url, params=data_json)
print("respon==", respon.text)
data_respon = respon.text
except:
data_respon = ""
# print("error")
finally:
print(data_respon)
return data_respon
def respon_callback(value):
print(value)
if __name__ == '__main__':
multiprocessing.freeze_support()
url = "http://www.weather.com.cn/data/sk/101190408.html"
data_json = {'mobile':"xiaoming", 'site': "11"}
print("start====>")
p = Pool(1)
p.apply_async(func=request_get,args=(url,data_json,),callback=respon_callback)
p.close()
p.join()
print("end===>")
Pool 必须在
if __name__ == '__main__': "
调用
Python3.5 可以使用 aiohttp 和 asyncio实现
import aiohttp
import asyncio
"""
aiohttp:发送http请求
1.创建一个ClientSession对象
2.通过ClientSession对象去发送请求(get, post, delete等)
3.await 异步等待返回结果
"""
async def main():
url = 'http://httpbin.org/get'
async with aiohttp.ClientSession() as session:
async with session.get(url) as res:
print(res.status)
print(await res.text())
loop = asyncio.get_event_loop()
task = loop.create_task(main())
loop.run_until_complete(task)
安装 aiohttp pip 安装
pip install aiohttp
aiohttp官方文档https://aiohttp.readthedocs.io/en/stable/client_quickstart.html