 |

19.05.2022, 12:10
|
|
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами:
3197792
Репутация:
83
|
|
Переписываю одного бота на aiogram, сам в асинке полный ноль, выходит вот такая ошибка при запуске main.py.
RuntimeWarning: coroutine 'weather' was never awaited
main.py:
Код:
from
aiogram
import
executor
from
loader
import
dp
from
threads
import
*
from
handlers
import
*
if
__name__
==
'__main__'
:
threadWeather
.
start
(
)
executor
.
start_polling
(
dp
,
skip_updates
=
True
)
loader.py:
Код:
from
aiogram
import
Bot
,
Dispatcher
,
types
from
data
import
TOKEN
bot
=
Bot
(
token
=
TOKEN
,
parse_mode
=
"HTML"
)
dp
=
Dispatcher
(
bot
)
threads/__init__.py:
Код:
from
.
weather
import
weather
from
threading
import
Thread
threadWeather
=
Thread
(
target
=
weather
,
args
=
(
"10:56:00"
,
)
)
threads/weather.py:
Код:
from
main
import
bot
from
data
import
admins
from
datetime
import
datetime
from
time
import
sleep
# 12:00:00
async
def
weather
(
time
:
str
)
-
>
None
:
time
=
time
.
split
(
":"
)
while
True
:
_
=
datetime
.
now
(
)
if
_
.
hour
==
int
(
time
[
0
]
)
and
\
_
.
minute
==
int
(
time
[
1
]
)
and
\
_
.
second
==
int
(
time
[
2
]
)
:
await
bot
.
send_message
(
admins
[
0
]
,
"Время пришло!"
)
sleep
(
0.25
)
|
|
|

20.05.2022, 12:30
|
|
Участник форума
Регистрация: 13.02.2019
Сообщений: 183
С нами:
3815624
Репутация:
83
|
|
Сообщение от SOLO WARRIOR
Переписываю одного бота на aiogram, сам в асинке полный ноль, выходит вот такая ошибка при запуске main.py.
RuntimeWarning: coroutine 'weather' was never awaited
main.py:
Код:
from
aiogram
import
executor
from
loader
import
dp
from
threads
import
*
from
handlers
import
*
if
__name__
==
'__main__'
:
threadWeather
.
start
(
)
executor
.
start_polling
(
dp
,
skip_updates
=
True
)
loader.py:
Код:
from
aiogram
import
Bot
,
Dispatcher
,
types
from
data
import
TOKEN
bot
=
Bot
(
token
=
TOKEN
,
parse_mode
=
"HTML"
)
dp
=
Dispatcher
(
bot
)
threads/__init__.py:
Код:
from
.
weather
import
weather
from
threading
import
Thread
threadWeather
=
Thread
(
target
=
weather
,
args
=
(
"10:56:00"
,
)
)
threads/weather.py:
Код:
from
main
import
bot
from
data
import
admins
from
datetime
import
datetime
from
time
import
sleep
# 12:00:00
async
def
weather
(
time
:
str
)
-
>
None
:
time
=
time
.
split
(
":"
)
while
True
:
_
=
datetime
.
now
(
)
if
_
.
hour
==
int
(
time
[
0
]
)
and
\
_
.
minute
==
int
(
time
[
1
]
)
and
\
_
.
second
==
int
(
time
[
2
]
)
:
await
bot
.
send_message
(
admins
[
0
]
,
"Время пришло!"
)
sleep
(
0.25
)
Во-первых, не надо использовать никакие "loader" из дебильных примеров, во-вторых, зачем пытаться переписать что-то на асинк, если ты не понимаешь как он работает. Для начала разберись нормально в работе с ним на питоне, а потом берись за это чтоб не писать бредятину такую как ты написал в коде выше.
Потоки никакого отношения не имеют к асинку, вызов асинхронных функций делается через await
_:
Код:
await
weather
(
'12:00:00'
)
Но в твоем случае тебе это нужно переделать под таск, который может выполняться в фоне, ибо даже если ты его передашь в кварги executor'a в on_startup, он тебе заблочит весь эвент луп и полинг не запустится. По этому, разбирайся нормально в теме, а потом уже проблемы тут пытайся решать.
А чтоб без велосипедов как у тебя, есть отличное решение для планирования задач - APScheduler
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|