我试图找到一种方法,从一个函数中计算出4个请求值的平均值,这是我第一次尝试,我试图得到一个类,但我最终在如何调用多个请求的问题上陷入了圈圈,这样我就可以尽可能缩短得到该值的时间,我设法将值的总和存储在一个全局变量中,但无法返回该值或将其除以值的数目
import requests
import json
from collections import defaultdict
import threading
url = "https://www4.sii.cl/mapasui/services/data/mapasFacadeService/getPredioNacional"
headers = {
'host':"www4.sii.cl",
'cookie': "JSESSIONID=8A6FDE8962A11231DB70F9A259B2A669.mos05; AAGSID=8A6FDE8962A11231DB70F9A259B2A669.mos05",
'pragma': "no-cache",
'origin': "https://www4.sii.cl",
'accept-encoding': "gzip, deflate, br",
'accept-language': "en-US,en;q=0.8",
'user-agent': "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0",
'content-type': "application/json",
'accept': "application/json, text/plain, */*",
'cache-control': "no-cache",
'referer': "https://www4.sii.cl/mapasui/internet/",
'connection': "keep-alive",
'content-length':"448"
}
a=0
def prom_val(mzn, pred):
global a
ndict = defaultdict(list)
pl_a = '{"metaData":{"namespace":"cl.sii.sdi.lob.bbrr.mapas.data.api.interfaces.MapasFacadeService/getPredioNacional","conversationId":"UNAUTHENTICATED-CALL194.99.104.27","transactionId":"72030a64-b3e8-dc82-14cc-733564c821b7"},"data":{"predio":{"comuna":"2201","manzana":"%s","predio":"%s"},"servicios":[{"comuna":2201,"layer":"sii:BR_CART_ANTOFAGASTA_WMS","style":"PREDIOS_WMS_V0"},{"comuna":2201,"layer":"sii:BR_CART_AH_MUESTRAS","style":"AH_MUESTRA"}]}}' % (
mzn, pred)
try:
req = requests.post(url, data=pl_a, headers=headers, timeout=30)
except (requests.ConnectionError, requests.Timeout, requests.RequestException):
print("no{}\n".format(mzn))
try:
req = requests.post(url, data=pl_a, headers=headers, timeout=30)
except (requests.ConnectionError, requests.Timeout, requests.RequestException):
print("no{}\n".format(mzn))
try:
req = requests.post(url, data=pl_a, headers=headers, timeout=30)
except (requests.ConnectionError, requests.Timeout, requests.RequestException):
print("no {}\n".format(mzn))
text_req = req.text
jdd = json.loads(text_req)
ddd = jdd['data']
vlrdd = ddd['datosCapas'][0]['datos'][2]['valor']
vlr2 = vlrdd.replace('$','')
vlr3 = vlr2.replace('.','')
print(vlr3)
a+=int(vlr3)
print(a)
return a
def prom(rol):
rolsplit = rol.split("-")
mzn = rolsplit[0]
t1 = threading.Thread(target=prom_val, args=(mzn,'34'))
t1.start()
t2 = threading.Thread(target=prom_val, args=(mzn, '30'))
t2.start()
t3 = threading.Thread(target=prom_val, args=(mzn, '40'))
t3.start()
t4 = threading.Thread(target=prom_val, args=(mzn, '15'))
t4.start()
vall = a/4
return vall
print(prom('1076-34'))
您应该调用每个线程对象的
join
方法,等待线程完成并相应地更新a
的值:相关问题 更多 >
编程相关推荐