<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7232.77">
<TITLE>Can't start new thread</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P><FONT SIZE=2 FACE="Arial">I am trying to understand what is causing python to raise this error when I create a number of threads:</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">thread.error: can't start new thread</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">I have been told that it is due to the default thread size (1 MB), but I have recompiled python defining an alternate threadsize, and I am not seeing any changes. I defined the</FONT> <FONT SIZE=2 FACE="Arial">THREAD_STACK_SIZE in the thread_pthread.h file.</FONT></P>
<P><FONT SIZE=2 FACE="Arial">Any ideas?</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">Here is the code I am using to test the number of threads I can get running. It maxis out at 1031. I have tested it on two systems, one with 1GB of ram and another with 2GB of RAM.</FONT></P>
<P><FONT SIZE=2 FACE="Arial">import threading</FONT>
<BR><FONT SIZE=2 FACE="Arial">import time</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">class Mythread(threading.Thread):</FONT>
<BR><FONT SIZE=2 FACE="Arial"> def __init__(self):</FONT>
<BR><FONT SIZE=2 FACE="Arial"> self.__live = True</FONT>
<BR><FONT SIZE=2 FACE="Arial"> threading.Thread.__init__(self, target=self.runLoop)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> def runLoop(self):</FONT>
<BR><FONT SIZE=2 FACE="Arial"> while self.__live:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> time.sleep(.1)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> def stop(self):</FONT>
<BR><FONT SIZE=2 FACE="Arial"> self.__live = False</FONT>
<BR><FONT SIZE=2 FACE="Arial"> </FONT>
<BR><FONT SIZE=2 FACE="Arial">threads = []</FONT>
<BR><FONT SIZE=2 FACE="Arial">max = raw_input("max: ")</FONT>
<BR><FONT SIZE=2 FACE="Arial">if max == 'None':</FONT>
<BR><FONT SIZE=2 FACE="Arial"> max = None</FONT>
<BR><FONT SIZE=2 FACE="Arial">else:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> max = int(max)</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">while True:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> print len(threads)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t = Mythread()</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t.start()</FONT>
<BR><FONT SIZE=2 FACE="Arial"> threads.append(t)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if len(threads) == max:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">print 'all running'</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">while True:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> answer = raw_input("stop now? ") </FONT>
<BR><FONT SIZE=2 FACE="Arial"> if answer in ['Y','y']:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break</FONT>
<BR><FONT SIZE=2 FACE="Arial"> </FONT>
<BR><FONT SIZE=2 FACE="Arial">print "stopping"</FONT>
<BR><FONT SIZE=2 FACE="Arial">for t in threads:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t.stop()</FONT>
<BR><FONT SIZE=2 FACE="Arial"> </FONT>
<BR><FONT SIZE=2 FACE="Arial">print "joining"</FONT>
<BR><FONT SIZE=2 FACE="Arial">for t in T:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t.join()</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">while True:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> answer = raw_input("Quit now? ") </FONT>
<BR><FONT SIZE=2 FACE="Arial"> if answer in ['Y','y']:</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break</FONT>
<BR><FONT SIZE=2 FACE="Arial"> </FONT>
<BR><FONT SIZE=2 FACE="Arial">print "done"</FONT>
</P>
</BODY>
</HTML>