Найти - Пользователи
Полная версия: большое количество потоков в многопоточном приложении в linux
Начало » Python для экспертов » большое количество потоков в многопоточном приложении в linux
1 2
tier
Добрый день.
Вот код:

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
/proc/sys/kernel/threads-max
tier
redixin
/proc/sys/kernel/threads-max
32750
и?
clopomor
NR_TASKS в linux/include/linux/tasks.h с 512 до 2048
tier
clopomor
NR_TASKS в linux/include/linux/tasks.h с 512 до 2048
нет такого файла у меня в системе(OpenSuse 10.3). исходники ядра установлены.
redixin
а в сислоге ченить пишет?
tier
redixin
а в сислоге ченить пишет?
ничего.

Господа, пользователи линукса, попробуйте сами выполнить этот код и убедитесь, что в линуксе (любом дистре, с любой версией питона) невозможно создать 1000 потоков средствами питона. :(
Походу, натуральный баг.
В инете поискал на эту тему - ничего не нашел, кроме одного упоминания о том же - питон не может создать много потоков в линуксе.
slav0nic
возможно бока в glibс либе, а не в питоне…
redixin
поиграйся с ulimit -s, там памяти под стеки не хватает. меньше ulimit -s - больше тредов.
slav0nic
только что тем же самым занимался;)
глянь threading.stack_size() ф-цию
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB