ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Ошибка "RuntimeWarning: coroutine 'weather' was never awaited" (https://forum.antichat.xyz/showthread.php?t=1433468)

pomidorq 19.05.2022 12:10

Переписываю одного бота на 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
)


Neon3333 20.05.2022 12:30

Цитата:

Сообщение от 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


Время: 21:54