perf(bot): ⚡ Use one process per shard.

Start one process per shard and initialize a new one if any of them fails.
This commit is contained in:
Nyeki.py
2024-10-22 00:42:25 -03:00
parent 922498f45e
commit 29188e53c1
4 changed files with 53 additions and 4 deletions
+49 -3
View File
@@ -1,5 +1,51 @@
from payphone import bot
from payphone.core import config
def shard(shard_id: int, shard_count: int) -> None:
"""Starts a new shard.
Args:
shard_id (int): The shard's ID.
shard_count (int): The total amount of shards.
"""
from payphone.bot import bot
from payphone.core import config
bot.shard_ids = [shard_id]
bot.shard_count = shard_count
bot.run(config.TOKEN)
bot.bot.run(config.TOKEN)
if __name__ == "__main__":
import multiprocessing as mp
import time
import httpx
from payphone.core import config
response = httpx.get(
"https://discord.com/api/v10/gateway/bot",
headers={"Authorization": f"Bot {config.TOKEN}"},
)
info = response.json()
shard_count = info["shards"]
ps: list[mp.Process] = [
mp.Process(target=shard, args=(i, shard_count)) for i in range(shard_count)
]
for p in ps:
p.start()
time.sleep(5)
while True:
for i in range(shard_count):
if not ps[i].is_alive():
ps[i] = mp.Process(target=shard, args=(i, shard_count))
ps[i].start()
time.sleep(5)