У меня есть главный телеграмм бот который запускает другие боты в новом процессе.
После запуска второго бота в новый процесс программа уходит в ошибку именно на сервере, на компьютере код работает хорошо:
RuntimeError: Cannot enter into task wait_for=> while another task cb=[gather.._done_callback() at /usr/lib/python3.10/asyncio/tasks.py:720]> is being executed.
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram import executor
from aiogram import types
from bot.add_application import add_application
import os
import logging
logging.basicConfig(level=logging.DEBUG, filename='bot.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
TOKEND = ''
bot1 = Bot(token=TOKEND)
storage = MemoryStorage()
d = Dispatcher(bot1, storage=storage)
add_application.register_handler_app(d)
@d.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
keyboard = types.InlineKeyboardMarkup()
button1 = types.InlineKeyboardButton(text="Добавить приложение", callback_data="add")
button2 = types.InlineKeyboardButton(text="Удалить приложение", callback_data="delet")
button3 = types.InlineKeyboardButton(text="Сменить канал", callback_data="changec_hannel")
button4 = types.InlineKeyboardButton(text="Сменить бота", callback_data="change_bot")
button5 = types.InlineKeyboardButton(text="Запустить бота", callback_data="run")
button6 = types.InlineKeyboardButton(text="Авторизоваться VK",
url="https://oauth.vk.com/authorize?client_id=51711276&display=page&redirect_uri=https://t.me/distribution_postsBot&scope=wall,video,offline&response_type=token&v=5.52")
keyboard.add(button1, button2)
keyboard.add(button3, button4)
keyboard.add(button5)
keyboard.add(button6)
await message.answer("Меню", reply_markup=keyboard)
@d.callback_query_handler(text='run')
async def start_posts(callback: types.CallbackQuery):
import sqlite3
conn = sqlite3.connect('bot_users.sql')
cur = conn.cursor()
cur.execute(
'CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, IDUSER int , TOKEN varchar(46), NAMEBOT varchar(150), IDBOT varchar(50), IDCHANNEL varchar(50), NAMECHANNEL varchar(150), TITLECHANNEL varchar(150), STATUS varchar(10), DOMEN varchar(150))')
conn.commit()
cur.execute(f"SELECT * FROM users WHERE IDUSER = {callback.message.chat.id}")
data = cur.fetchall()
name_bot = {}
for bot in data:
name_bot[bot[3]] = bot[6]
keyboard = types.InlineKeyboardMarkup()
for key in name_bot:
b = types.InlineKeyboardButton(text=f' {key} | Канал: {name_bot[key]}', callback_data=key)
keyboard.add(b)
await callback.message.answer("Выберите бота для запуска", reply_markup=keyboard)
await callback.answer(cache_time=1)
cur.close()
conn.close()
@d.callback_query_handler()
async def choosing_bot(callback: types.CallbackQuery):
import sqlite3
conn = sqlite3.connect('bot_users.sql')
cur = conn.cursor()
cur.execute(
'CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, IDUSER int , TOKEN varchar(46), NAMEBOT varchar(150), IDBOT varchar(50), IDCHANNEL varchar(50), NAMECHANNEL varchar(150), TITLECHANNEL varchar(150), STATUS varchar(10), DOMEN varchar(150))')
conn.commit()
cur.execute(f"SELECT * FROM users WHERE IDUSER = {callback.message.chat.id}")
data = cur.fetchall()
name_bot = {}
TOKEN = ""
if not os.path.exists("token_bot.txt"):
with open(r"token_bot.txt", "w") as file:
print("Файла с токеном бота не существует, создаём файл!")
for bot in data:
name_bot[bot[3]] = bot[2]
for key in name_bot:
if key in callback.data:
TOKEN = name_bot[key]
with open(f"token_bot.txt", "r+") as file:
file.write(str(TOKEN) + "\n")
from bot.start import start_bot
import multiprocessing as mp
mp.Process(target=start_bot).start()
await callback.message.answer(f"Запускаем {callback.data}")
await callback.answer(cache_time=1)
cur.close()
conn.close()
if __name__ == '__main__':
executor.start_polling(d, skip_updates=True)
Функция def choosing_bot вызывает в новом процессе функцию def start_bot()
Код в файле
from aiogram import executor
from bot.create_bot import dp
from handlers import get_wall_posts
get_wall_posts.go_posts(dp)
def start_bot():
print("start_bot")
executor.start_polling(dp, skip_updates=True)
Помогите разобраться