tier
Ноя. 25, 2007 18:52:07
Добрый день.
Вот код:
import time, threading
def f1():
for i in range (5):
print threading.activeCount()
time.sleep(10)
for i in range(1000):
p1 = threading.Thread(target=f1)
p1.start()
Результат такой - во FreeBSD 6.2 и Windows XP легко создаются 1000
потоков. В линуксе разных версий, доступных мне, везде можно создать
300-400 потоков, дальше ошибка:
thread.error: can't start new thread
И это - на одной и той же машине. Конфигурация питона и ОС - везде по
умолчанию.
Как можно это победить и в чем тут дело?
Спасибо.
redixin
Ноя. 26, 2007 00:01:20
/proc/sys/kernel/threads-max
tier
Ноя. 26, 2007 07:08:32
redixin
/proc/sys/kernel/threads-max
32750
и?
clopomor
Ноя. 26, 2007 10:23:51
NR_TASKS в linux/include/linux/tasks.h с 512 до 2048
tier
Ноя. 26, 2007 10:31:05
clopomor
NR_TASKS в linux/include/linux/tasks.h с 512 до 2048
нет такого файла у меня в системе(OpenSuse 10.3). исходники ядра установлены.
redixin
Ноя. 26, 2007 12:41:56
а в сислоге ченить пишет?
tier
Ноя. 26, 2007 13:07:58
redixin
а в сислоге ченить пишет?
ничего.
Господа, пользователи линукса, попробуйте сами выполнить этот код и убедитесь, что в линуксе (любом дистре, с любой версией питона) невозможно создать 1000 потоков средствами питона. :(
Походу, натуральный баг.
В инете поискал на эту тему - ничего не нашел, кроме одного упоминания о том же - питон не может создать много потоков в линуксе.
slav0nic
Ноя. 26, 2007 13:45:00
возможно бока в glibс либе, а не в питоне…
redixin
Ноя. 26, 2007 14:03:42
поиграйся с ulimit -s, там памяти под стеки не хватает. меньше ulimit -s - больше тредов.
slav0nic
Ноя. 26, 2007 14:20:09
только что тем же самым занимался;)
глянь threading.stack_size() ф-цию