快速巨量LIST数据处理

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class LargSumWithCallable {

	static int threadCounts = 50;// 使用的线程数
	static long sum = 0;

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		System.out.println("===========" +  System.currentTimeMillis()  );
		List<Integer> list = new ArrayList<Integer>();
		for (int j = 0; j <= 10003; j++) {
			list.add(j);
		}
		int len = list.size() / threadCounts;// 平均分割List
		// List中的数量没有线程数多(很少存在)
		if (len == 0) {
			threadCounts = list.size();// 采用一个线程处理List中的一个元素
			len = list.size() / threadCounts;// 重新平均分割List
		}
		List<Callable<Long>> callList = new ArrayList<Callable<Long>>();
		for (int i = 0; i < threadCounts; i++) {
			final List<Integer> subList;
			if (i == threadCounts - 1) {
				subList = list.subList(i * len, list.size());
			} else {
				subList = list.subList(i * len, len * (i + 1) > list.size() ? list.size() : len * (i + 1));
			}
			// 采用匿名内部类实现
			callList.add(new Callable<Long>() {
				public Long call() throws Exception {
					long subSum = 0L;
					for (Integer i : subList) {
						subSum += i;
						try {
	                        Thread.sleep(10);//相当于业务逻辑处理
	                    } catch (InterruptedException e) {
	                        e.printStackTrace();
	                    }
					}
					//System.out.println("分配给线程:" + Thread.currentThread().getName() + "那一部分List的整数和为:\tSubSum:" + subSum);
					return subSum;
				}
			});
		}
		
		ExecutorService exec = Executors.newFixedThreadPool(threadCounts);
		List<Future<Long>> futureList = exec.invokeAll(callList);
		for (Future<Long> future : futureList) {
			sum += future.get();
		}
		exec.shutdown();
		System.out.println(sum);
		System.out.println("===========" +  System.currentTimeMillis()  );
		sum=0;
		for (int j = 0; j < list.size(); j++) {
			sum += list.get(j);
			try {
                Thread.sleep(10);//相当于业务逻辑处理
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
		}
		System.out.println(sum);
		System.out.println("===========" +  System.currentTimeMillis()  );
	}
}

 

### 使用 Python 调用巨量千川 API 的方法 为了成功调用字节跳动旗下的巨量千川平台所提供的 M-API 接口,在实际操作前需确保已获得 `access_token` 和必要的认证信息。此过程涉及多个步骤,包括但不限于获取授权码 (`auth_code`) 及通过该授权码换取访问令牌 (`access_token`)。 #### 获取 Access Token 首先,需要实现从授权服务器请求 access token 的功能。这通常涉及到向特定 URL 发送 POST 请求并附带客户端凭证和其他必要参数: ```python import requests def get_access_token(client_id, client_secret, auth_code): url = "https://open.oceanengine.com/oauth2/access_token" payload = { 'client_key': client_id, 'client_secret': client_secret, 'grant_type': 'authorization_code', 'code': auth_code } response = requests.post(url, data=payload).json() return response.get('data', {}).get('access_token') ``` 一旦获得了有效的 `access_token` 后,则可以利用它来查询广告计划或其他所需资源。下面是一个简单的例子展示如何使用上述提到的 token 来获取广告投放方案列表: #### 查询广告计划数据 当拥有有效期内的 `access_token` 时,可以通过指定接口如 `/v1/ad/get/plan/list/` 来检索广告计划详情。这里需要注意的是具体路径可能依据官方最新文档有所变动,因此建议始终参照最新的API手册进行开发工作[^2]。 ```python def fetch_ad_plans(access_token, advertiser_id): url = f"https://api.oceanengine.com/v1/ad/get/plan/list/" headers = {"Authorization": f"Bearer {access_token}"} params = {'advertiser_ids': str(advertiser_id)} try: resp = requests.get(url=url, headers=headers, params=params) result = resp.json() if not isinstance(result['message'], string_types) or int(result['code']) != 0: raise Exception(f"Error fetching ad plans: {result}") plan_list = [] for item in result["data"]["list"]: entry = {} entry['account_name'] = item.get('account_name') entry['account_id'] = item.get('account_id') # Add more fields as needed based on the actual structure returned by the API plan_list.append(entry) return plan_list except Exception as e: print(e) return None ``` 以上代码片段展示了怎样构建 HTTP GET 请求以取得广告计划的信息,并处理返回的结果集。值得注意的是,除了基础的身份验证外,还需要根据业务需求调整所传递给服务端的具体参数设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值