Merge pull request #37 from Payphone-Bot/36-use-multiprocessing-to-distribute-the-server-load-to-multiple-cores

perf(bot): ⚡ Use one process per shard.
This commit is contained in:
Rafael Bradley
2024-10-22 00:43:25 -03:00
committed by GitHub
4 changed files with 53 additions and 4 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ services:
env_file:
- .env
environment:
- IS_DEBUG=false
IS_DEBUG: "false"
depends_on:
- database
- redis
+1
View File
@@ -7,6 +7,7 @@ requires-python = ">=3.12"
dependencies = [
"aerich==0.7.1",
"aiohttp>=3.10.10",
"click>=8.1.7",
"colorthief>=0.2.1",
"httpx>=0.27.2",
"orjson>=3.10.7",
+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)
Generated
+2
View File
@@ -371,6 +371,7 @@ source = { virtual = "." }
dependencies = [
{ name = "aerich" },
{ name = "aiohttp" },
{ name = "click" },
{ name = "colorthief" },
{ name = "httpx" },
{ name = "orjson" },
@@ -384,6 +385,7 @@ dependencies = [
requires-dist = [
{ name = "aerich", specifier = "==0.7.1" },
{ name = "aiohttp", specifier = ">=3.10.10" },
{ name = "click", specifier = ">=8.1.7" },
{ name = "colorthief", specifier = ">=0.2.1" },
{ name = "httpx", specifier = ">=0.27.2" },
{ name = "orjson", specifier = ">=3.10.7" },