谢谢你看看这个。我承认我已经在 python 中涉足了 1 周的并行处理,所以如果我错过了一个明显的解决方案,我深表歉意。我有一段代码,我想运行几个不同的 mp.pool() 实例。主 .py 文件中的那些工作正常,但是当我尝试将它们添加到模块中的函数时,我没有从它们中得到任何输出。该应用程序只是运行过去并继续。我认为这可能与这篇文章有关,但它没有就替代方法提供任何想法来完成我所需要的。在一个简单示例中工作的代码是这样的:
import multiprocessing as mp
def multiproc_log_result(retval):
results.append(retval)
if len(results) % (10 // 10) == 0:
print('{0}% done'.format(100 * len(results) / 10))
def meat():
print 'beef'
status = True
return status
results = []
pool = mp.Pool(thread_count)
for x in range(10):
pool.apply_async(meat, callback=multiproc_log_result)
pool.close()
pool.join()
def veggie():
print 'carrot'
status = True
return status
results = []
pool = mp.Pool(thread_count)
for x in range(10):
pool.apply_async(veggie, callback=multiproc_log_result)
pool.close()
pool.join()
不起作用的代码是:
import multiprocessing as mp
def multiproc_log_result(retval):
results.append(retval)
if len(results) % (10 // 10) == 0:
print('{0}% done'.format(100 * len(results) / 10))
def meat():
print 'beef'
status = True
return status
results = []
pool = mp.Pool(thread_count)
for x in range(10):
pool.apply_async(meat, callback=multiproc_log_result)
pool.close()
pool.join()
def nested_stupid_fn():
def multiproc_log_result(retval):
results.append(retval)
if len(results) % (10 // 10) == 0:
print('{0}% done'.format(100 * len(results) / 10))
def veggie():
print 'carrot'
status = True
return status
results = []
pool = mp.Pool(thread_count)
for x in range(10):
pool.apply_async(veggie, callback=multiproc_log_result)
pool.close()
pool.join()
nested_stupid_fn()
最终,我希望通过将它存在于单独模块中的另一个函数中来删除一个不起作用的示例。因此,当我导入模块 packngo 并将其用作 packngo.basic_packngo(inputs) 并在其中某处具有嵌套函数的内容时,它们将运行。任何帮助将不胜感激。:DI 是一个非常简单的人,所以如果你能像对孩子一样解释,也许它会在我脑海中浮现!