Greetings once again, fellow Monks.
I have some code which forks a number of children to carry out a number of tasks in parallel.
Each child calls File::Temp::tempfile() to create a temporary file and some (non-perl) code is written to the temporary file and the filehandle closed.
An external command is then called to execute the code in the temporary files.
The code regularly fails to create a unique filename - File::Temp croaks after 10 attempts to guess another unique name (the 10 attempts is a constant hardcoded in the module's source).
After rummaging around in File::Temp's guts and inserting some print statements for debugging, it seems that each of children try to use the same strings for the temporary filename(s).
I've worked around this by modifying File::Temp to include the process ID ($$) on the end of any filenames, but I feel this is a less-than-ideal solution.
Security and/or paranoia isn't a primary concern, so having process IDs in filenames doesn't worry me too much.
Could someone explain to me why the randomness of the temporary filenames in multiple processes isn't exactly random and suggest any other solutions/hacks to workaround the problem?
Cheers,
BazB.
If the information in this post is inaccurate, or just plain wrong, don't just downvote - please post explaining what's wrong.
That way everyone learns.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|