list1 = list('abcdef')
list2 = list('klmnop')
list3 = list('uvwxyz')
for item1, item2, item2 in zip(list1, list2, list3):
print(item1, item2, item2)
import itertools
list1 = list('abcdef')
list2 = list('klmnop')
list3 = list('uvwxyz')
for item in itertools.chain(list1, list2, list3):
print(item)
import itertools
list1 = list('abcdef')
list2 = list('klmnop')
list3 = list('uvwxyz')
for item1, item2, item3 in itertools.product(list1, list2, list3):
print(item1, item2, item3)
cd C:\my_project\
.venv\bin\python3.exe main.py
import typing
import asyncio
import functools
def throttled(delay: float, measure: typing.Literal['end_to_start', 'start_to_start'] = 'start_to_start'):
def decorator(actual_func: typing.Coroutine) -> typing.Coroutine:
queue = None
task = None
async def _single_query(future, args, kwargs):
try:
result = await actual_func(*args, **kwargs) # тут делаем асинхронное обращение к сервису
except BaseException as err:
future.set_exception(err) # была ошибка - теперь await future выкинет исключение
else:
future.set_result(result) # полуен результат - await future вернёт его
async def _work_loop():
nonlocal queue
nonlocal task
while True:
try:
# ждем, пока не придёт запрос, или пока не закончится таймаут
future, args, kwargs = await asyncio.wait_for(queue.get(), delay)
except asyncio.TimeoutError: # новые запросы долго не приходят, сворачиваем работу, чтобы не тратить ресурсы
queue = None
task = None
return
single_task = _single_query(future, args, kwargs)
if measure == 'start_to_start':
asyncio.create_task(single_task)
else:
await single_task
queue.task_done() # каждому успешному get() соответствует task_done()
await asyncio.sleep(delay)
@functools.wraps(actual_func)
async def query(*args, **kwargs):
nonlocal queue # обращение к переменной выше уровнем, но не глобальной
nonlocal task
future = asyncio.Future() # Future просигналит, когда наш запрос будет обслужен
if task is None: # либо это первый запрос, либо запросы долго не приходили, и мы свернули работу
queue = asyncio.Queue()
task = asyncio.create_task(_work_loop())
await queue.put((future, args, kwargs))
return await future
return query
return decorator
# delay - минимальный интервал между запросами в секундах
# measure - как мерять интервалы между запросами: начало-начало или конец-начало
@throttled(delay=5.0, measure='start_to_start')
async def my_coroutine(*args, **kwargs) -> ReturnValue:
...
зашитая в кнопку команда объектом энтри игнорируется
To create a line break or new line (<br>), end a line with two or more spaces, and then type return.
' \n'
start_stop(True)
не закончит выполнение, time.sleep() даже не начнёт выполняться, не говоря уже о последующем. А start_stop(True)
не закончит выполнение никогда, потому что ты сделал вечный цикл.await asyncio.sleep(сколько_нужно)
, а за это время бот упал и был перезапущен, бот просто не "вспомнит" о ранее запланированных, но не выполненных рассылках. This requires Intents.guilds to be enabled.
print(1, 2, 3) # 1 2 3
print(1, 2, 3, sep='') # 123
print(1, 2, 3, sep=', ') # 1, 2, 3
print(1, 2, 3) # 1 2 3 с переводом на новую строку
print(1, 2, 3, end='') # 1 2 3 без перевода на новую строку
print(1, 2, 3, end=':') # 1 2 3: без перевода на новую строку
sep.join(str(arg) for arg in args) + end
v в каком файле ошибка v v строка v v функция v
File "/home/maksim/.local/lib/python3.10/site-packages/telebot/__init__.py", line 1074, in __threaded_polling
self.worker_pool.raise_exceptions()
^ оператор, вызвавший ошибку ^
File "/home/maksim/Загрузки/Python/Квест/Квест.py", line 33, in questions
bot.send_message(_id, 'Комфортно ли вам находиться в обществе?', reply_markup=markup)
bot.send_message(_id, 'Комфортно ли вам находиться в обществе?', reply_markup=markup)
chat not found
. Т.е. не найден чат с таким идентификатором, который ту указал. А значит, в переменной _id содержится неправильное значение. Выясняй, как оно туда попало.