rgfergrg
This commit is contained in:
86
gpt 优化后的速度版本.py
Normal file
86
gpt 优化后的速度版本.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import random
|
||||
import asyncio
|
||||
import aiohttp
|
||||
from loguru import logger
|
||||
|
||||
from tonutils.client import ToncenterV3Client
|
||||
from tonutils.utils import to_amount
|
||||
from tonutils.wallet import WalletV4R2
|
||||
|
||||
# 日志尽量减少 IO
|
||||
logger.add("wallet_log_{time:YYYY-MM-DD}.log", rotation="1 day", retention="30 days")
|
||||
|
||||
API_KEY = "AFMEX4F23ZRPOUIAAAAPHGIE5QECWZA5M75E54VD72O5IJEGP5IW3LOTXO7Z4QOX7MV6JQQ"
|
||||
IS_TESTNET = False
|
||||
|
||||
headers = {
|
||||
"accept": "*/*",
|
||||
"authorization": "Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6US",
|
||||
"content-type": "application/json",
|
||||
"user-agent": "Mozilla/5.0",
|
||||
}
|
||||
|
||||
# 全局复用 Toncenter client
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=10, max_retries=1)
|
||||
|
||||
|
||||
async def get_balance(session, address: str):
|
||||
url = f"https://tonapi.io/v2/accounts/{address}"
|
||||
|
||||
for _ in range(2): # 降低重试次数提升速度
|
||||
try:
|
||||
async with session.get(url, headers=headers, timeout=3) as r:
|
||||
data = await r.json()
|
||||
return to_amount(int(data.get("balance", 0)))
|
||||
except Exception:
|
||||
await asyncio.sleep(0.05) # 小延迟即可
|
||||
return None
|
||||
|
||||
|
||||
async def handle_wallet(session, idx: int):
|
||||
wallet, public_key, private_key, mnemonic = WalletV4R2.create(client)
|
||||
address = wallet.address.to_str(
|
||||
is_user_friendly=True,
|
||||
is_url_safe=True,
|
||||
is_bounceable=False,
|
||||
is_test_only=False
|
||||
)
|
||||
|
||||
balance = await get_balance(session, address)
|
||||
|
||||
if balance:
|
||||
logger.info(f"[{idx}] Balance={balance} | {address} | Mnemonic={' '.join(mnemonic)}")
|
||||
else:
|
||||
print(f"[{idx}] 余额查询失败 | {address},余额:{balance}")
|
||||
|
||||
|
||||
async def worker(worker_id, session, queue):
|
||||
while True:
|
||||
idx = await queue.get()
|
||||
await handle_wallet(session, idx)
|
||||
queue.task_done()
|
||||
|
||||
|
||||
async def main():
|
||||
queue = asyncio.Queue()
|
||||
|
||||
# 单一 Session 复用,性能最优
|
||||
async with aiohttp.ClientSession() as session:
|
||||
|
||||
# 启动固定数量 Worker,提高并行效率
|
||||
workers = [asyncio.create_task(worker(i, session, queue)) for i in range(20)]
|
||||
|
||||
counter = 0
|
||||
while True:
|
||||
counter += 1
|
||||
await queue.put(counter)
|
||||
|
||||
# 控制生成速度
|
||||
await asyncio.sleep(0.01)
|
||||
|
||||
for w in workers:
|
||||
w.cancel()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
57
test111.py
57
test111.py
@@ -1,26 +1,43 @@
|
||||
import threading
|
||||
import random
|
||||
import time
|
||||
|
||||
def daemon_thread_function():
|
||||
print("守护线程开始")
|
||||
time.sleep(5)
|
||||
print("守护线程结束")
|
||||
import requests
|
||||
from tonutils.utils import to_amount
|
||||
|
||||
def non_daemon_thread_function():
|
||||
print("非守护线程开始")
|
||||
time.sleep(2)
|
||||
print("非守护线程结束")
|
||||
|
||||
# 创建守护线程
|
||||
daemon_thread = threading.Thread(target=daemon_thread_function, daemon=True)
|
||||
# 创建非守护线程
|
||||
non_daemon_thread = threading.Thread(target=non_daemon_thread_function)
|
||||
def get_ton_num(address):
|
||||
headers = {
|
||||
'accept': '*/*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
||||
'authorization': 'Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6USY',
|
||||
'cache-control': 'no-cache',
|
||||
'content-type': 'application/json',
|
||||
'dnt': '1',
|
||||
'origin': 'https://tonviewer.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://tonviewer.com/',
|
||||
'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Microsoft Edge";v="132"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0',
|
||||
}
|
||||
|
||||
# 启动线程
|
||||
daemon_thread.start()
|
||||
non_daemon_thread.start()
|
||||
for i in range(3):
|
||||
try:
|
||||
response = requests.get(
|
||||
f'https://tonapi.io/v2/accounts/{address}',
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
print("主线程继续执行")
|
||||
# 主线程等待非守护线程结束
|
||||
non_daemon_thread.join()
|
||||
print("主线程结束")
|
||||
return to_amount(int(response.json()["balance"]))
|
||||
except:
|
||||
time.sleep(random.random())
|
||||
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(get_ton_num(address="EQD-8WpOhknZ6Wip9EN-jz5Tw-SJvYgu_x2FSDFlXH1kSo2O"))
|
||||
@@ -64,7 +64,7 @@ async def get_ton_num_async(session, address):
|
||||
|
||||
|
||||
async def main(i) -> None:
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1)
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=3, max_retries=3)
|
||||
wallet, public_key, private_key, mnemonic = WalletV4R2.create(client)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
|
||||
@@ -87,7 +87,7 @@ def get_ton_num(address):
|
||||
|
||||
|
||||
async def main(i) -> None:
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1)
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=2, max_retries=1)
|
||||
wallet, public_key, private_key, mnemonic = WalletV4R2.create(client)
|
||||
|
||||
for i1 in range(5):
|
||||
|
||||
@@ -19,7 +19,7 @@ IS_TESTNET = True
|
||||
|
||||
|
||||
def main() -> None:
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1)
|
||||
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=3, max_retries=3)
|
||||
wallet, public_key, private_key, mnemonic = WalletV4R2.create(client)
|
||||
|
||||
# Uncomment and use the following lines to create different wallet versions:
|
||||
|
||||
Reference in New Issue
Block a user