Size: a a a

2021 February 09

💭П

💭 Руслан Прохоров... in rannts
Ничего вы не понимаете....
источник

A🍊

Andrey 🍊 in rannts
Байт Словович
10 кг, 10 см.. автономная работа меньше часа..  кому он нужен? Можно же взять просто ноут и бооооольшой моник.
Тут не оператор ЭВМ, тут расчёт ЭВМ: один несёт ноут, второй — генератор.
источник

💭П

💭 Руслан Прохоров... in rannts
Да, да, я уже видел. Да хочу :-)
источник

RB

Roman Bolkhovitin in rannts
Мальчики и девочки, желательно извращенцы, а подскажите будь ласка.

Есть у меня очень странно написанный легаси на твистеде, там делается callInThread, в внутри опять используются deferred. Но твистед это не смущает, и в принципе оно работает.

И вот заставила нужда перейти на asyncioreactor, потому что для twisted'a подходящей библиотеки не нашел, а самому писать сложно, да и некогда, и столкнулся с тем, что фьючеры asyncio в тредах не работают, потому что там банально нет эвент-лупа, он только в главном потоке.

Налепил костыль - передаю луп из главного потока в остальные и там вызываю:

def set_loop_if_not_set(loop):
   try:
       asyncio.get_event_loop()
   except RuntimeError:
       asyncio.set_event_loop(loop)


Оно сразу ожило, но что-то гложут меня сомнения - а не распидорасит ли всё к какой-нибудь матери? Создавать отдельный луп в каждом треде я не могу, он должен быть тот самый, который к реактору твистеда привязан. Или это случай когда не попробуешь не узнаешь?
источник

AM

Artem Malyshev in rannts
Roman Bolkhovitin
Мальчики и девочки, желательно извращенцы, а подскажите будь ласка.

Есть у меня очень странно написанный легаси на твистеде, там делается callInThread, в внутри опять используются deferred. Но твистед это не смущает, и в принципе оно работает.

И вот заставила нужда перейти на asyncioreactor, потому что для twisted'a подходящей библиотеки не нашел, а самому писать сложно, да и некогда, и столкнулся с тем, что фьючеры asyncio в тредах не работают, потому что там банально нет эвент-лупа, он только в главном потоке.

Налепил костыль - передаю луп из главного потока в остальные и там вызываю:

def set_loop_if_not_set(loop):
   try:
       asyncio.get_event_loop()
   except RuntimeError:
       asyncio.set_event_loop(loop)


Оно сразу ожило, но что-то гложут меня сомнения - а не распидорасит ли всё к какой-нибудь матери? Создавать отдельный луп в каждом треде я не могу, он должен быть тот самый, который к реактору твистеда привязан. Или это случай когда не попробуешь не узнаешь?
Я возможно что-то путаю, но вроде как из соседнего треда можно было шедулить таску в главный луп ещё с питона 3.4
источник

AM

Artem Malyshev in rannts
Вот по поводу ляжет или нет текущая реализация, предположу что это вопрос времени. asyncio loop вообще thread safe ?
источник

AM

Artem Malyshev in rannts
Возможно поскольку ты вызывает его через reactor то, там есть у самого twisted какие-то заглушки от этого. Но не факт.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Насколько я знаю евент луп не потоко-безопасен.
Зашедулить в из треда можно - сейчас найду пример.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Вроде как вот это
loop.call_soon_threadsafe(loop.create_task, my_coroutine())

Где loop - это евент луп переданный как-то в тред
источник

RB

Roman Bolkhovitin in rannts
asyncio.run_coroutine_threadsafe
источник

RB

Roman Bolkhovitin in rannts
@proofit404 спасибо за подсказку ))
источник

RB

Roman Bolkhovitin in rannts
Kirill (Cykooz) Kuzminykh
Вроде как вот это
loop.call_soon_threadsafe(loop.create_task, my_coroutine())

Где loop - это евент луп переданный как-то в тред
это совсем низкоуровневая какая-то штука с коллбеками )
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Roman Bolkhovitin
asyncio.run_coroutine_threadsafe
А, ну вот эта обёртка вызвает внутри себя то что я привел. Она только делает доп. проверки и заворачивает корутину в калбяк, который будет вызван в потоке, где живёт евент-луп
источник

AM

Artem Malyshev in rannts
Roman Bolkhovitin
@proofit404 спасибо за подсказку ))
источник
2021 February 10

KK

Kirill (Cykooz) Kuzm... in rannts
источник

in

ildar nizamov in rannts
источник

RB

Roman Bolkhovitin in rannts
источник

SA

Sergey Arkhipov in rannts
Замечательная новость. Надо подкинуть идею использования этого в сигнатурах функций вместо бесполезного singledispatch
источник

БС

Байт Словович... in rannts
афигенно.. то есть даже не сишный switch, а нормальный pattern matching как в нормальный функциональных языках.
источник

AM

Artem Malyshev in rannts
Байт Словович
афигенно.. то есть даже не сишный switch, а нормальный pattern matching как в нормальный функциональных языках.
Нет. В нормальных языках сопоставление с образцом умеет на этапе компиляции сказать, что у тебя не все кейсы покрыты и доказать это на уровне типов.
источник