<!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>