
04.11.2021, 09:45
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от laiser
Вот мой код, как я писал уже, что я вызываю эту функцию через бота, а он у меня ассинхронный, и в процессе работы отправляется смс в телегу.
Пробовал через threading, 1й поток нормально, а все последующие выдавали ошибки.
Код:
Код:
class Sendig:
async def start(self, tokens, user_id, stream):
self._user_id = user_id
self._tokens = tokens
self.st = stream
tokens = tokens.split('\n')
start = 0
for i in range(stream):
stop = start + len(tokens[i::stream])
if tokens[start:stop]:
await asyncio.sleep(1)
self._task = asyncio.create_task(self._job(tokens[start:stop], i), name=str(user_id))
start = stop
async def _job(self, tokens, stream):
await bot.send_message(self._user_id, f'Привет')
# Код работы скрипты
return True
А вот так вызывается:
Код:
Код:
@dp.message_handler(commands=['start'], state="*")
@dp.message_handler(text="Главное меню", state="*")
async def bot_start(message: types.Message, state: FSMContext):
x = await Sendig().start('1\n2\n3', str(message.from_user.id), 3)
Python:
Код:
import
asyncio
class
Sendig
:
def
__init__
(
self
,
tokens
,
user_id
)
:
self
.
_user_id
=
user_id
self
.
_tokens
=
tokens
async
def
start
(
self
)
:
tasks
=
[
]
for
x
in
range
(
0
,
len
(
self
.
_tokens
)
)
:
task
=
asyncio
.
create_task
(
self
.
_job
(
self
.
_tokens
[
x
]
)
,
name
=
str
(
self
.
_user_id
)
)
tasks
.
append
(
task
)
await
asyncio
.
gather
(
*
tasks
)
print
(
'end'
)
async
def
_job
(
self
,
tokens
)
:
print
(
str
(
tokens
)
,
'uI:'
,
str
(
self
.
_user_id
)
)
async
def
bot_start
(
)
:
arr
=
[
'342343242e'
,
'12312314rw'
,
'12312321d21'
]
sg
=
Sendig
(
arr
,
'123123123'
)
await
sg
.
start
(
)
asyncio
.
run
(
bot_start
(
)
)
|
|
|