<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: running js tests faster</title>
	<atom:link href="http://blog.mozilla.org/nfroyd/2012/11/01/running-js-tests-faster/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mozilla.org/nfroyd/2012/11/01/running-js-tests-faster/</link>
	<description>Improving performance at Mozilla</description>
	<lastBuildDate>Sat, 20 Apr 2013 10:00:40 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>By: Gregory Szorc</title>
		<link>http://blog.mozilla.org/nfroyd/2012/11/01/running-js-tests-faster/#comment-651</link>
		<dc:creator>Gregory Szorc</dc:creator>
		<pubDate>Fri, 02 Nov 2012 00:14:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mozilla.org/nfroyd/?p=114#comment-651</guid>
		<description><![CDATA[Thank you for looking into this!

FWIW, Python has multiprocessing.Pool which theoretically allows you to dole out work to a subprocess pool: http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool

Unfortunately, the implementation in Python 2 (and possibly still Python 3) has some pretty nasty gotchas in that it doesn&#039;t handle signals properly (http://www.bryceboe.com/2012/02/14/python-multiprocessing-pool-and-keyboardinterrupt-revisited/). So, you inevitably need to roll your own version.

For the temporary file, check out tempfile.NamedTemporaryFile. e.g.

  with tempfile.NamedTemporaryFile() as tf:
      tf.write(...)
      tf.flush()

      path = tf.name
      # Execute your command

   # When the context manager (with) goes out of scope, the temp file is unlinked. Yay context managers!

I think this make-based solution abuses make because you aren&#039;t really using make for dependencies. I think a tool like GNU Parallel is much better suited for the task at hand. That being said, the abuse isn&#039;t severe, make is a tool we have readily available in the build system, and, most importantly, it works. Great work!]]></description>
		<content:encoded><![CDATA[<p>Thank you for looking into this!</p>
<p>FWIW, Python has multiprocessing.Pool which theoretically allows you to dole out work to a subprocess pool: <a href="http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool" rel="nofollow">http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool</a></p>
<p>Unfortunately, the implementation in Python 2 (and possibly still Python 3) has some pretty nasty gotchas in that it doesn&#8217;t handle signals properly (<a href="http://www.bryceboe.com/2012/02/14/python-multiprocessing-pool-and-keyboardinterrupt-revisited/" rel="nofollow">http://www.bryceboe.com/2012/02/14/python-multiprocessing-pool-and-keyboardinterrupt-revisited/</a>). So, you inevitably need to roll your own version.</p>
<p>For the temporary file, check out tempfile.NamedTemporaryFile. e.g.</p>
<p>  with tempfile.NamedTemporaryFile() as tf:<br />
      tf.write(&#8230;)<br />
      tf.flush()</p>
<p>      path = tf.name<br />
      # Execute your command</p>
<p>   # When the context manager (with) goes out of scope, the temp file is unlinked. Yay context managers!</p>
<p>I think this make-based solution abuses make because you aren&#8217;t really using make for dependencies. I think a tool like GNU Parallel is much better suited for the task at hand. That being said, the abuse isn&#8217;t severe, make is a tool we have readily available in the build system, and, most importantly, it works. Great work!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Fink</title>
		<link>http://blog.mozilla.org/nfroyd/2012/11/01/running-js-tests-faster/#comment-648</link>
		<dc:creator>Steve Fink</dc:creator>
		<pubDate>Thu, 01 Nov 2012 16:25:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mozilla.org/nfroyd/?p=114#comment-648</guid>
		<description><![CDATA[See also https://bugzilla.mozilla.org/show_bug.cgi?id=745237 and its dependency tree.

The jstests.py harness has parallel execution capability. It may be unnecessary given your make-based approach, but it does work. It also deals with timeouts and parallel output.

There&#039;s some ugly work in between here and merging the two test suites, though.]]></description>
		<content:encoded><![CDATA[<p>See also <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=745237" rel="nofollow">https://bugzilla.mozilla.org/show_bug.cgi?id=745237</a> and its dependency tree.</p>
<p>The jstests.py harness has parallel execution capability. It may be unnecessary given your make-based approach, but it does work. It also deals with timeouts and parallel output.</p>
<p>There&#8217;s some ugly work in between here and merging the two test suites, though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: glandium</title>
		<link>http://blog.mozilla.org/nfroyd/2012/11/01/running-js-tests-faster/#comment-647</link>
		<dc:creator>glandium</dc:creator>
		<pubDate>Thu, 01 Nov 2012 08:38:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mozilla.org/nfroyd/?p=114#comment-647</guid>
		<description><![CDATA[Also note that build slaves run make check without any -j.]]></description>
		<content:encoded><![CDATA[<p>Also note that build slaves run make check without any -j.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
