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