import time import os from tqdm import tqdm import random import requests import json import threading from threading import Thread import redis lock = threading.RLock() pool = redis.ConnectionPool(host='104.244.90.248', port=63179, max_connections=50, db=10, password='Zhicheng123*') redis_ = redis.Redis(connection_pool=pool, decode_responses=True) with open("api_key.txt", "r",) as f: a = f.read() a = a.split("\n") redis_key_name_openaikey_bad_list = "openaikey_bad_list" redis_key_name_openaikey_list = "openaikey_list" redis_zirenwu = "redis_zirenwu" api_key_list = [] for i in a: api_key_list.append(str(i.split("----")[-1])) for i in api_key_list: redis_.rpush(redis_key_name_openaikey_list, i) lock = threading.RLock() file = r'./data/small_title_prompt' zirenwu_list = [] path_list = [] for root, dirs, files in os.walk(file): for file in files: path = os.path.join(root, file) path_list.append(path) for path in path_list: with open(path, encoding="utf-8") as f: type_prompt = path.split("/")[-1].split(".")[0] texts = f.readlines() for i in texts: zirenwu_list.append((i, type_prompt)) import random random.shuffle(zirenwu_list) for i in zirenwu_list: redis_.rpush(redis_zirenwu, str(i)) def request_api_chatgpt(api_key, prompt, type_prompt): global api_key_list global zirenwu_list try: OPENAI_API_KEY = api_key url = "https://api.openai.com/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {OPENAI_API_KEY}" } data = { "model": "gpt-3.5-turbo", "messages": [ {"role": "user", "content": prompt}, ], "temperature": 0.5 } response = requests.post(url, headers=headers, data=json.dumps(data), timeout=240) res = response.json() text = res["choices"][0]["message"]["content"] lock.acquire() # api_key_list.append(api_key) redis_.rpush(redis_key_name_openaikey_list, api_key) with open("/home/majiahui/mulu_ner/data/paper_prompt_title_3_1/{}_data.txt".format(type_prompt), mode="a") as f: f.write(prompt) f.write("**************") f.write(text) f.write("\n") lock.release() time.sleep(5) except: time.sleep(20) lock.acquire() redis_.rpush(redis_key_name_openaikey_list, api_key) redis_.rpush(redis_zirenwu, str((type_prompt, prompt))) lock.release() if __name__ == '__main__': while True: if redis_.llen(redis_zirenwu) == 0: time.sleep(1) continue elif redis_.llen(redis_zirenwu) != 0 and redis_.llen(redis_key_name_openaikey_list) != 0: lock.acquire() api_key = redis_.lpop(redis_key_name_openaikey_list) api_key = api_key.decode('UTF-8') dan_zirenwu = redis_.lpop(redis_zirenwu) dan_zirenwu = dan_zirenwu.decode('UTF-8') lock.release() # dan_zirenwu = zirenwu_list.pop(0) dan_zirenwu = eval(dan_zirenwu) prompt, type_prompt = dan_zirenwu[0], dan_zirenwu[1] t = Thread(target=request_api_chatgpt, args=(api_key, prompt, type_prompt)) t.start() elif redis_.llen(redis_key_name_openaikey_list) == 0: time.sleep(1) continue else: time.sleep(1) continue