Я хочу (быстро) просканировать свою локальную сеть, чтобы найти хост, прослушивающий определенный TCP-порт, например 2442 (сетевой API JS8Call, если кому интересно).
Я скопировал структуру программы из туториала, объясняющего асинхронное выполнение в Python с помощью пакета asyncio. Программа вроде работает, но отдельные задачи выполняются не параллельно, а последовательно, хотя создание задач и сбор результатов вроде бы в порядке. Когда он запускается, я вижу, что сообщения печати из асинхронной функции ping появляются последовательно, причем следующее всегда появляется ровно после истечения времени ожидания предыдущего.
Что не так с моим функция ping? Полагаю, он не создает объект сопрограммы.
#!/usr/bin/python
import socket
import asyncio
socket.setdefaulttimeout(0.5)
async def ping(host, port):
r = f'{host}:{port} OK'
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect( (host, port) )
print( r )
s.close()
return r
except Exception as X:
print(f'{host} FAILED')
return X
async def main():
tasks = []
async with asyncio.TaskGroup() as tg:
# start all tasks
for i in range(5,240):
host = f'192.168.33.{i}'
t = tg.create_task( ping(host, 22) )
tasks.append(t)
results = [ task.result() for task in tasks ]
for p in results:
if p != None:
print(p)
asyncio.run( main() )
Подробнее здесь: https://stackoverflow.com/questions/791 ... chronously
Почему моя асинхронная функция не работает асинхронно? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение