<p>我认为您可以将<code>env</code>作为参数提供给<code>coll</code>函数,如下所示:</p>
<pre><code>@parallel(pool_size=20)
def coll(env): # < updated
print env.hosts
print env.host
print env.gateway
if _is_ssh_ok(env.host):
d = patt()
def doitnow():
p=Pool(20)
with open('ytj_sto.hn','r') as f:
for line in f.readlines():
line = line.strip()
if not len(line) or line.startswith('#'):
continue
env.gateway = line.split(':')[0]
env.hosts = line.split(':')[1].split(',')
result = p.apply_async(coll, args=(env,)) # < updated
result.get()
p.close()
p.join()
</code></pre>
<p>使用<a href="https://docs.python.org/3/library/multiprocessing.html#multiprocessing-programming" rel="nofollow noreferrer">multiprocessing library</a>有一些怪癖。此信息可能与您的场景特别相关:</p>
<blockquote>
<p>Global variables</p>
<p>Bear in mind that if code run in a child process tries to access a global variable, then the value it sees (if any) may not be the same as the value in the parent process at the time that Process.start was called.</p>
<p>However, global variables which are just module level constants cause no problems.</p>
</blockquote>