Змея / Говнокод #28164 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
import asyncio

async def hello():
    return "hello"

async def world():
    return "world"

async def comma():
    return ","

async def space():
    return " "

async def excl():
    return "!"

async def capitalize(coro):
    return (await coro).capitalize()

async def main():
    print(''.join(await asyncio.gather(*[asyncio.create_task(task) for task in (capitalize(hello()), comma(), space(), capitalize(world()), excl())])))

asyncio.run(main())

Изучаем asyncio через говнокод

Запостил: valo94 valo94, (Updated )

Комментарии (29) RSS

  • Раз уж изучаешь, то надо по этапам писать, по строчкам, а не эту длинную колбасень.
    Ответить
  • хуйня

    возьми вебсокеты, да напиши чат
    Ответить
  • Хуета.
    Если поубирать все эти async/await, то вообще нихуя не изменится. Пример не отвечает на вопрос "зачем", а это при обучении очень важно.
    Ответить
    • А реально, нахуя всё это говно нужно? Для c10k в вебе?
      Ответить
      • В основном -- да.

        Мы используем корутины и для c10k (не только в вебе, я и в десктопе не советовал бы создавать по 10K потоков в минуту, особвенно на винде) и чтобы не блокировать гуйный тред (но мы пишем не на питоне). У нас есть еще стракчрл канкаренси: мы умеем легко кенсльнуть все 100500 корутин (что не всегда просто сделать с потоками). Хотя в питонке тоже можно cancelнуть задачу
        Ответить
  • ну покажи хотя бы как ты можешь на одном потоке независимые задачи ставить
    import asyncio
    from typing import List
    
    
    async def connect(host: str):
        reader, writer = await asyncio.open_connection(host, 80)
        writer.write(("\r\n".join(["GET / HTTP/1.0", f"Host:{host}"]) + "\r\n\r\n").encode("ASCII"))
        await writer.drain()
        response = await reader.read()
        writer.close()
        print(f"Hello from {host}: {str(response, 'UTF-8')}")
    
    
    async def chatter(name: str, sleep_time: int):
        for _ in range(10):
            print(f"I am {name}")
            await asyncio.sleep(sleep_time)
    
    
    async def loop():
        tasks: List[asyncio.Task] = [asyncio.create_task(chatter("petrushka", 1)),
                                     asyncio.create_task(chatter("popka", 3)),
                                     asyncio.create_task(connect("yandex.ru")),
                                     asyncio.create_task(connect("govnokod.ru"))]
        for task in tasks:
            await task
    
    
    asyncio.run(loop())
    Ответить
    • > tasks: List[asyncio.Task] =

      Какой уебан придумал такой синтаксис?
      Ответить
      • Добрый день.

        Такой уебанский синтаксис для вас придумали

        Guido van Rossum <guido at python.org>,
        Jukka Lehtosalo <jukka.lehtosalo at iki.fi>,
        Łukasz Langa <lukasz at python.org>

        Им помогли
        Jim Baker, Jeremy Siek, Michael Matson Vitousek, Andrey Vlasovskikh, Radomir Dopieralski, Peter Ludemann, and the BDFL-Delegate, Mark Shannon.

        -------
        Эта хуйня тут чисто поциональна, как ты понимаешь, я мог ничего там не писать
        Ответить
        • блядь, ну если бы там было

          asyncio.Task[] tasks
          или

          asyncio.Task tasks[]

          то это был был бы повод не пользоваться питоном
          Ответить
      • Примерно в 42.178% языков такой. В чём проблема?
        Ответить
  • ну или вот лабный совсем вариант: ставишь аздачи с помощью "start", они себе конкурентно работают, а потом их можнот стопать

    тут главное не забыть поставить aioconsole
    import asyncio
    from typing import Dict
    
    from aioconsole import ainput
    
    
    async def chatter(name: str, sleep_time: int):
        while not asyncio.current_task().cancelled():
            print(f"I am {name}")
            await asyncio.sleep(sleep_time)
    
    
    async def loop():
        tasks: Dict[str, asyncio.Task] = {}
        while True:
            command = await ainput("Command: ")
            if command == "start":
                name = await ainput("Name: ")
                time = int(await ainput("Time: "))
                tasks[name] = asyncio.create_task(chatter(name, time))
            elif command == "list":
                for name in tasks.keys():
                    print(name)
            elif command == "stop":
                name = await ainput("Name: ")
                try:
                    tasks[name].cancel()
                    del tasks[name]
                except KeyError:
                    pass
            else:
                print("Go fuck your self please")
    
    
    asyncio.run(loop())
    Ответить
    • - asyncio.run(loop())
      + def main():
      +     asyncio.run(loop())
      + 
      + 
      + if __name__ == '__main__':
      +     main()

      Исправил, проверь.
      Ответить
      • да, так более питонично

        и безопасно: случайно не запустить
        Ответить
      • как люди в здравом уме могут пользоватся хуйнёй где нужны такие костыли?
        Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8