首页 > 其他分享 >异步请求、批量处理、持续写入

异步请求、批量处理、持续写入

时间:2023-03-05 14:56:26浏览次数:32  
标签:异步 end 批量 sentence 写入 list res start time

import grequests
import pandas as pd
import time

all_start = time.time()
sentence_list = []  # 存储相似句子对

df = pd.read_csv("new_clean.csv")
all_sentence_list = list(df["句子"].unique())  # 先去重再转为列表
serving_url = ""
auth_username = ""
auth_password = ""
id = 0
while len(all_sentence_list) > 0:
    current_sentence = all_sentence_list[0]  # 当前句子列表的第一个句子
    other_sentence_len = len(all_sentence_list)  # 目前该列表的长度
    print(id, current_sentence, other_sentence_len)
    batch = 500  # 每次匹配500
    batch_num = other_sentence_len // batch  # 需要匹配的总伦次,30000整除500=60次
    cuttent_sentence_same_list = [
        current_sentence
    ]  # 这个变量是为了装与第一个句子的所有语义相同的句子,包含第一个句子本身
    for num in range(batch_num + 1):  # 从第0轮到第59轮
        start = num * 500 + 1  # i=0时,start=1
        end = (num + 1) * 500  # i=0时,end=500
        if end > other_sentence_len:  # 如果end大于目前循环匹配列表的长度,则取(该列表长度)作为结尾
            end = other_sentence_len
        print(start, end)
        req_list = []
        for i in range(start, end):
            req_list.append(
                grequests.get(
                    serving_url
                    + "/sentence_distance?s1={}&s2={}".format(
                        current_sentence, all_sentence_list[i]
                    ),
                    auth=(auth_username, auth_password),
                    timeout=4,  # 设置每次请求的超时时限,防止堵塞
                )
            )
        start = time.time()
        res_list = grequests.map(req_list)  # 并行发送,等最后一个运行完后返回
        end = time.time()
        print("耗时:{}".format(end - start))
        for res in res_list:
            if not res[0]:
                continue
            try:
                distance = res[0].json()["distance"]
                url = res[1].url
                if distance < 0.6:
                    print(
                        distance,
                        res[1].url,
                    )
                    url = res[1].url
                    sentence2 = url.split("&s2=")[1]  # 句子2
                    cuttent_sentence_same_list.append(sentence2)
            except:
                continue
    for sent in cuttent_sentence_same_list:  # 剔除掉已经相似的句子
        if sent in all_sentence_list:
            all_sentence_list.remove(sent)
    # 遍历一轮后获取到的句子都拼成一行写到txt中去
    file_name = "same_sentence.txt"
    with open(file_name, "a", encoding="utf-8") as f:
        current_same_sentences = "----".join(cuttent_sentence_same_list)
        f.write(current_same_sentences + "\n")
    id += 1

all_end = time.time()

print("总耗时:{}".format(all_end - all_start))

标签:异步,end,批量,sentence,写入,list,res,start,time
From: https://www.cnblogs.com/tiansz/p/17180565.html

相关文章

  • 批量插入防止重复方案整理
    批量插入防止重复方案除了在程序中处理的方案,本次共有4种方案:1.insertignoreintoinsertignoreintouser(id,name)values('1','Tom');当插入数据时,如出......
  • php curl 批量请求
    实例:<?php$ch=array();$res=array();$conn=array();$urls=array('baidu'=>"http://www.baidu.com/",'cheyun'=>"http://auto.jrj.com.cn/",'w3c'=......
  • mysqli 批量执行多条语句
    可以一次性的执行多个操作或取回多个结果集。实例:<?php$mysqli=newmysqli("localhost","root","111111","test");/*checkconnection*/if(mysqli_connect_errno())......
  • 批量导入VCF文件
    Outlook系列软件在导入vCard(*.vcf)格式的联系人时一次只能导入成功一个,但我们可以通过VBA脚本让这个任务自动化.操作步骤如下:1,把所有vCards文件放在一个文件夹内。例如C:\V......
  • Blend开启时,不关闭深度写入可能出现的问题
    测试用shader,就是在Unlit基础上开启Blend,开启深度写入(红色加粗部分)Shader"My/Blend/Unlit_Blend_ZWriteOn"{Properties{_MainTex("Texture",2D)......
  • Excel批量插入图片(Excel函数集团)
    批量插入图片,归函数集团管了?对,你没看错,就是函数集团的活!因为Microsoft365出了一个新函数:IMAGE!所以,以前折腾的那种一堆合并以后再贴进txt文本文件再贴回来的,没用了?是与......
  • 批量插入分页符
    问题:在已有固定结构表格的基础上批量插入分页符。解决:借助数据透视表完成第一步:在第一行前插入一行第二步:建构数据如下图的辅助列1与辅助列2选取G2:G7,输入数字1后按......
  • 2.JavaScript如何实现异步编程,可以详细描述EventLoop机制
    单线程和异步js的任务分为同步和异步两种,它们的处理方式也不同,同步任务是直接在主线程上排队执行,异步任务则会被放在任务队列中,若有多个任务(异步任务)则要在任务队列中排......
  • 7.如何处理循环的异步操作
    functiongetMoney(){varmoney=[100,200,300]for(leti=0;i<money.length;i++){compute.exec().then(()=>{console.log(money[i])......
  • Java 需要快速读出和写入的框架架构
    //对标牛客竞赛小白月赛109a题//importjava.util.*;importjava.io.*;publicclassMain{staticlongn;staticBufferedReaderbf=newBufferedReader(n......