Форум сайта python.su
Или может какие виды потоков разделяют нагрузку на несколько процессоров?
Или разделение происходит на более низком уровне и заморачиваться этим надо когда кодишь на С?
Офлайн
Alex_Kutsan
разделяют, это обычные системные потоки. И, как и в С, в питоне 1000 потоков - это чаще всего плохое решение.
Офлайн
Я не собираюсь их делать 1000, думаю максимум 10-20, но сложность в том что потоки должны время от времени плодить свои потоки. КОгдато давно в делфе у меня такое не проконало, в си не пробовал. В питоне вполне возможно. Но таки образом ели каждый поток будет плодить потоки, то их количество может вырасити. Хотя потоки не будут плодить более 2-3. Задача например стоит сделать виртуальную телефонную сеть в которой можно отправлять сообщения, и конектится в друзья. Взять себе 1 телефон, а остальные отдать под управление ИИ. ТОесть каждый телефон - поток. он отправляет сообщение - порождение нового потока. Он получает сообщение - порождение нового потока.
Только что баловался с рекрусивным созданием потоков. Оказывается действительно возможно.
def Make_thread():
time.sleep(2)
print 'I want begin thrread'
T = threading.Thread(None,Make_thread,None)
T.start()
time.sleep(5)
print 'I did It'
Офлайн
Alex_Kutsan
Зачем? Создайте пул потоков и обрабатывайте таски с его помощью. И не придется морочиться с количеством потоков.
Офлайн
Весь смысл в безсерверности( если я вас правильно понял). Тоесть Юзеры должны общатся как в безсерверной сети.
Офлайн
Насколько я помню из за GIL не разделяют. Т.е. в один момент времени может обрабатываться только один поток. Если нужно распараллелить код по ядрам используй процессы (модуль multiprocessing).
Офлайн
А есть идеи как протестить?
Офлайн
Alex_Kutsan, прочитал топик. Не понял вопроса обсуждения.
О работе GIL я писал: http://asvetlov.blogspot.com/2011/07/gil.html
Что вам непонятно?
Офлайн
Про GIL Почитал. Интересно, познавательно. Вы советуете пробовать multiprocessing для много поточности разбивающейся на все ядра.
Вот небольшая документация http://docs.python.org/library/multiprocessing.html . Хотелось бы на самом деле проверить действительно ли оно загружает все ядра. Как возможно реализовать данное? просто создать 3-4 потока и посмотреть в SystemMonitor? Или в винде какую-то анологичную улиту?
Офлайн
да
Офлайн