【发布时间】:2016-06-15 13:36:01
【问题描述】:
我正在尝试按照以下步骤从 google play 中提取 purchase_state:
import base64
import requests
import smtplib
from collections import OrderedDict
import mysql.connector
from mysql.connector import errorcode
......
- 查询数据库,从我的表中返回数千行带有
purchase_idfield 的行- 检查数据库中的每一行,并提取purchase_id,然后在google play 中查询所有这些。例如,如果我之前的结果 step是1000,1000次是查询google(刷新token+查询)。
- 将来自 google play 的新字段
purchase status添加到新字典中,除了从 mysql 查询中获取的其他一些字段。- 最后一步是对我的 dic 进行循环,然后准备所需的报告
编辑后:
def build_dic_from_db(data,access_token):
dic = {}
for row in data:
product_id = row['product_id']
purchase_id = row['purchase_id']
status = check_purchase_status(access_token, product_id,purchase_id)
cnt = 1
if row['user'] not in dic:
dic[row['user']] = {'id':row['user_id'],'country': row['country_name'],'reg_ts': row['user_registration_timestamp'],'last_active_ts': row['user_last_active_action_timestamp'],
'total_credits': row['user_credits'],'total_call_sec_this_month': row['outgoing_call_seconds_this_month'],'user_status':row['user_status'],'mobile':row['user_mobile_phone_number_num'],'plus':row['user_assigned_msisdn_num'],
row['product_id']:{'tAttemp': cnt,'tCancel': status}}
else:
if row['product_id'] not in dic[row['user']]:
dic[row['user']][row['product_id']] = {'tAttemp': cnt,'tCancel':status}
else:
dic[row['user']][row['product_id']]['tCancel'] += status
dic[row['user']][row['product_id']]['tAttemp'] += cnt
return dic
问题是我的代码运行缓慢〜总执行时间:448.7483880519867,我想知道是否有改进我的脚本。有什么建议吗?
【问题讨论】:
-
瓶颈似乎来自google play请求。您是否考虑过创建多个执行程序以在单独的线程中查询数据库?
-
@Jean-FrançoisFabre 嘿,你能再解释一下吗,这是什么意思,我是 python 新手!为了通知你,我只有一个对 mysql 的 sql 查询而没有过滤,然后我将遍历所有 purchase_id,并且每次购买都查询谷歌。我没有在 mysql 中应用任何过滤,因为我的查询足够大,我试图在我的字典中构建过滤。
标签: python performance google-play-developer-api