【发布时间】:2018-08-08 23:39:30
【问题描述】:
感谢您查看此内容。我承认我已经在 python 中涉足了 1 周的并行处理,所以如果我错过了一个明显的解决方案,我深表歉意。我有一段代码,我想运行几个不同的 mp.pool() 实例。主 .py 文件中的那些工作正常,但是当我尝试将它们添加到模块中的函数时,我没有从它们中得到任何输出。该应用程序只是运行过去并继续。我认为这可能与post 有关,但它没有提供任何关于实现我需要的替代方法的想法。在一个简单的例子中工作的代码是这样的:
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) 并在其中某处具有嵌套函数的内容时,它们将运行。任何帮助将不胜感激。 :D 我是一个非常简单的人,所以如果你能像对孩子一样解释,也许它会在我脑海中浮现!
【问题讨论】:
-
我要指出的是,有些代码像 multiproc_log_result 一样被删掉了,目前实际上并没有做任何事情。这只是一种快速/肮脏的简化和测试方法,以隔离我的问题发生的位置。
标签: python python-2.7 python-multiprocessing process-pool