from random_word import RandomWords
import asyncio
import aiofiles
class Saver():
def __init__(self):
self.old_words = None
self.setup()
self.queue = asyncio.Queue()
# Сохраняет содержимое в множество, что бы не читать файл каждый раз
# Вызывать ассинхронно смысла нет, тк мы пока не знаем список слов, которые уже есть
def setup(self):
with open('old_words.txt', 'r') as f:
self.old_words = set([line.strip() for line in f.readlines()])
async def write(self):
while True:
new_word = await self.queue.get() # Получаем новое слово
self.old_words.add(new_word) # Добавляем в множество
for file in ['old_words.txt', 'new_words.txt']:
async with aiofiles.open(file, 'a+') as f:
await f.write(f'{new_word}\n')
async def working(_saver):
while True:
word = RandomWords().get_random_word()
await _saver.queue.put(word) # Добавляем новое слово в очередь
await asyncio.sleep(1)
if __name__ == "__main__":
saver = Saver()
# Создаем цикл событий
event_loop = asyncio.get_event_loop()
# Запускаем генератор слов
event_loop.create_task(working(saver))
# Запускаем сохранялку
event_loop.create_task(saver.write())
event_loop.run_forever()
uid = uuid.uuid4()
HttpResponse.set_cookie('uid', uid )
class User(models.Model):
uid= models.CharField(max_length=64)
rejected_news= models.ManyToManyField(News, null=True)
User(uid=uid).save()
user.rejected_news.add(news)
дописывать новые контакты в существующий файл, а так же в отдельный файл только новые контакты
with open...
aiofiles.open()
использовать, раз код асинхронный?async def gather():
working()
только тогда, когда есть данные для записи? Заодно и от глобальных переменных избавишься. И она не вызывается нигде, вроде?
event_loop = asyncio.get_event_loop() # создаем цикл событий
aiobot(event_loop, token) # Запускаем бота, передав цикл, в котором он должен существовать
pyrobot(api_id, api_hash, phone_number) # Запускаем юзера...
event_loop.run_forever() # Запускаем цикл
Твой вариант очень далёк от моего кода.
from aiogram import Bot, Dispatcher, executor, types
from pyrogram import Client, filters
import asyncio
def pyrobot(api_id, api_hash, phone_number):
print("pyro started")
app = Client("Pyrobot", api_id, api_hash, phone_number)
@app.on_message(filters.chat("some_chat"))
async def print_pyrogram():
print("Pyrogram")
app.run()
def aiobot(event_loop, token):
bot = Bot(token=token)
dp = Dispatcher(bot)
print("aio started")
@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
print("Aiogram")
async def start_bot(dp):
event_loop.create_task(dp.start_polling())
event_loop.run_until_complete(start_bot(dp))
api_id = "..."
api_hash = "..."
phone_number = "..."
token="..."
if __name__ == '__main__':
event_loop = asyncio.get_event_loop()
aiobot(event_loop, token)
pyrobot(api_id, api_hash, phone_number)
event_loop.run_forever()
Telethon пробовал, не понравилось
Нужно мне вникать в асинхронность и многопоточность, пока сложно даётся.
elif call.data == "but1"
[^\w\d\_\-]
а не ^[^wd_-]$
/[^а-яА-ЯёЁ\w\d\_\-]/g
Я в регулярках 0
const regEx = /[^а-яА-ЯёЁ\w\d\_\-]/g;
const test = "фыАфЁёfdG5h$#&#^%&&*hr$%^&_3-465!'\"\№ ;%:?*())(*&^%$#@!~"
console.log(test.replace(regEx, ''));
Вы должны вызывать
table.setCurrentIndex(QModelIndex())
каждый раз, когда выбирается ячейка.Для этого вам нужно удалить строку
и отслеживать событие
Удаляйте выделение каждый раз, когда выбор меняется
Для всей таблицы это скорее всего можно сделать через
ItemDelegate
, но я мало пользовался делегатами, так что пример привести не возьмусь. Это скорее догадка