maximum number of threads

Jean-Paul Calderone exarkun at divmod.com
Wed Jan 10 09:19:22 EST 2007


On Wed, 10 Jan 2007 12:11:59 -0200, Felipe Almeida Lessa <felipe.lessa at gmail.com> wrote:
>On 1/10/07, Laurent Pointal <laurent.pointal at limsi.fr> wrote:
>>This is a system configurable limit (up to a maximum).
>>
>>See ulimit man pages.
>>
>>test
>>
>>         ulimit -a
>>
>>to see what are the current limits, and try with
>>
>>         ulimit -u 2000
>>
>>to modify the maximum number of user process (AFAIK each thread use a
>>process entry on Linux)
>
>I don't think it's only this.

Indeed you are correct.  The actual limit you are hitting is the size
of your address space.  Each thread is allocated 8MB of stack.  382
threads consumes about 3GB of address space.  Even though most of this
memory isn't actually allocated, the address space is still used up.  So,
when you try to create the 383rd thread, the kernel can't find anyplace
to put its stack.  So you can't create it.

Try reducing your stack size or reducing the number of threads you create.
There's really actually almost no good reason to have this many threads,
even though it's possible.

    exarkun at charm:~$ python Desktop/test.py
    50
    100
    150
    200
    250
    300
    350
    Exception raised: can't start new thread
    
    Biggest number of threads: 382
    exarkun at charm:~$ ulimit -Ss 4096
    exarkun at charm:~$ python Desktop/test.py
    50
    100
    150
    200
    250
    300
    350
    400
    450
    500
    550
    600
    650
    700
    750
    Exception raised: can't start new thread
    
    Biggest number of threads: 764
    exarkun at charm:~$
    
Jean-Paul



More information about the Python-list mailing list