title: Why does my python function treat a string argument as list/array when using Pool apply_async?
body: <p>I'm encountering some strange behavior in my python program. I'm using a <code>Pool</code> to run some functions in parallel and using the <code>apply_async</code> function. The strange behavior is that, apparently, significantly more arguments are being passed to the function than should be passed.  It's likely something silly, but here is the relevant context:</p>
  <pre class="lang-py prettyprint-override"><code>def do_joesecurity_analysis(filename: str):
      # Stuff
      ...
      return;
  
  ...
  def do_analysis(args):
      ...
      pool = Pool();
  
      for dirpath, dirnames, filenames in os.walk(directory):
          for f in filenames:
              ...
              print( type(f) );
              start_analysis = pool.apply_async(do_joesecurity_analysis, args = (f) );
  </code></pre>
  <p>The error I get is:</p>
  <pre><code>TypeError: do_joesecurity_analysis() takes 1 positional argument but 64 were given
  </code></pre>
  <p>Now, the length of the filename happens to be 64 characters long (it's a combination of letters and numbers), and that debugging <code>print</code> statement says <code>&lt;class 'str'&gt;</code>, so I'm confused as to why it seems to treat each character as an argument.</p>
  <p><strong>Note:</strong> Just to make sure that I wasn't going crazy, I made a normal function call to <code>do_joesecurity_analysis(f)</code> (i.e. not in a <code>Pool</code>), and the function ran perfectly.</p>
  <p>If it's relevant, the interpreter I'm using is version 3.9.1.</p>
  <p>If necessary, I will provide additional information.</p>
  <p>Thanks!</p>