import threading
import time
from tkinter import Tk, Button, ttk
def start_parsing():
def parse():
total_pages = 100 # Пример: всего страниц для парсинга
for i in range(total_pages):
time.sleep(0.1) # Имитация работы парсера
progress_bar['value'] = (i + 1) / total_pages * 100
root.update_idletasks() # Обновление UI
# Запуск парсера в отдельном потоке
threading.Thread(target=parse, daemon=True).start()
# Создание UI
root = Tk()
progress_bar = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate")
progress_bar.pack(pady=20)
start_button = Button(root, text="Start Parsing", command=start_parsing)
start_button.pack(pady=10)
root.mainloop()
и там всё правильно...
@deco_time
def f(a, b):
c = 0
for i in range(1000000):
c += a * b
return c
>>> Время работы функции: 0:00:00.049027
такое чувство, что у меня выводится в неправильном формате
time
.у другого человека тот же код выводит время функции в формате - 0:00:00.000001говорит лишь о том, что то устройство на котором он запускает код работает настолько медленно что datetime.now() успевает отсчитать микросекунду, чтобы разница между стартовым и финишным временем была не нулевой.
a + b
выполняется за некоторое количество наносекунд. Соответственно для datetime.now() и стартовое и финишное время одинаково, отсюда и нули. datetime
, а c time
. import asyncio
import re
from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.types import Message
TOKEN = ""
dp = Dispatcher()
@dp.message()
async def handle_loadinfo_link(message: Message):
text = message.text.strip() # попытался заменить на split(' ')[-1] не получается.
pattern = r'https?://\S+'
url_match = re.search(pattern, text)
# Если есть ссылка.
if url_match:
link = url_match.group(0)
if "https://loads.ati.su/loadinfo" in link:
# Что-то делаю с ссылкой...
await message.answer("Ссылка принята! Обрабатываю...")
else:
await message.answer("Неверная ссылка, она должна начинаться на https://loads.ati.su/loadinfo")
# Если нет ссылки.
else:
await message.answer("Нет ссылки в сообщении.")
async def main() -> None:
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
https://loads.ru
(или https://loads.ru"
, если кавычка там не случайно). Но потом вы сравниваете https://loads.ru с re
предпочтительнее.
Мне кажется, что непредвиденное поведение может быть, если пользователь нажмёт несколько раз на кнопку парсинга, запустив несколько потоков, которые будут конкурировать между собой (что возможно приведёт к появлению артефактов отображения или краху, а может и нет). Но это решается блокировкой кнопки. А изменение прогресс бара из одного потока Tk переживает вроде бы корректно. Вполне допускаю, что это ошибка выжившего и то, что я предложил не нужно делать в принципе никому и никогда.