Форум сайта python.su
14
Когда происходит выполнение лямбда выражений и разрешение имен переменных в ней? Эксперименты показывают, что при выполнении.
А это значит, зачем городить костыли вроде
Thread(target=func, args=(1,2), kwargs={'a'='b', 'c'='d'})
Thread(lambda: func(1, 2, a=b, c=d))
Отредактировано odnochlen (Окт. 30, 2012 03:46:25)
Офлайн
14
Тогда уже Thread(target=lambda: func(1, 2, a='b', c='d')). Всё равно громоздко.
Офлайн
14
Зато в документацию лазить не надо и автодополнение. А target могли бы сделать первым аргументом, он кагбе используется чаще, чем group. А так скопировали жавоидное api.
Собственно, этот фокус можно использовать гораздо чаще, везде там, где передается функция со списком параметров. Thread только один пример.
Офлайн
173
odnochlenВроде такого some_func(fn, *args, **kwargs), как в concurent.futures?
А target могли бы сделать первым аргументом,
Офлайн
14
Да нет, просто, чтобы target не надо было указывать как хеш-аргумент.
Офлайн
14
Ребята, конструктор Thread появился очень давно, изменить его сигнатуру означает нарушить обратную совместимость со всем имеющимся кодом. Такое делать нельзя.
Вот если бы threading проектировался сейчас — он был бы другим.
Кстати, если кто заметил: в новом Питоне методы вроде setDaemon и setName стали свойствами (методы тоже остались для той самой обратки), Lock и Condition теперь классы а не функции-фабрики.
В 3.4, возможно, войдет RWLock.
Так что работа ведется, но некоторые части нельзя выкинуть или поменять.
Офлайн
14
хз кому как а мне удобнее без лямбды прост код пишу не в одну строку а как-то так :
Thread(target=func, args=(1,2), kwargs={'a'='b', 'c'='d'})
Отредактировано @cckyi_boxxx (Окт. 18, 2012 02:03:18)
Офлайн
14
Ну понятно, лет 10 назад содрали api с явы и так оно и осталось. Только питон не ява, в которой замыканий нет и функцию в новом треде не запустить, надо класс создавать.
Андрей СветловНикто не заметил - тройка ненужна, для нее нет модулей. Как ты на ней сидишь, кстати?
Кстати, если кто заметил: в новом Питоне
Офлайн
14
Никто не заметил - тройка ненужна, для нее нет модулей. Как ты на ней сидишь, кстати?
Офлайн
14
Ровно сижу. С удобством. Мне модулей хватает.
@cckyi_boxxx: не читал, но порицаю...
Кодировка давно починена, если что. GIL мешает только виртуально, если руки кривые. На самом деле при нагрузке нужно масштабирование на кластер, что предполагает многопроцессовость а не многопоточность.
Про удобное общение потоков — вообще не понял. Есть конкретное предложение или это абстрактная хотелка из серии «сделайте мне красиво»?
Офлайн