【发布时间】:2014-10-22 14:49:55
【问题描述】:
我需要一些方法来使用 pool.map() 中接受多个参数的函数。根据我的理解, pool.map() 的目标函数只能有一个可迭代的参数,但有没有办法可以传递其他参数?在这种情况下,我需要传入一些配置变量,例如我的 Lock() 和日志信息到目标函数。
我试图做一些研究,我认为我可以使用部分函数来让它工作?但是我不完全理解这些是如何工作的。任何帮助将不胜感激!这是我想做的一个简单示例:
def target(items, lock):
for item in items:
# Do cool stuff
if (... some condition here ...):
lock.acquire()
# Write to stdout or logfile, etc.
lock.release()
def main():
iterable = [1, 2, 3, 4, 5]
pool = multiprocessing.Pool()
pool.map(target(PASS PARAMS HERE), iterable)
pool.close()
pool.join()
【问题讨论】:
-
在这里讨论过:stackoverflow.com/questions/5442910/…(我已经成功使用了 J.F. Sebastien 的“star”方法)
-
请在使用多处理时使用 try/finally 子句,并在 finally 中使用 close() 和 join() 以确保在发生错误时关闭进程。 stackoverflow.com/questions/30506489/…
-
@zeehio 不应该是自动的吗?
-
@endolith 应该,但通常不是。如果主 python 程序结束,它的所有子程序都被杀死/回收,但如果主程序继续运行(例如,因为并行化组件是整个程序的一小部分),你将需要一些东西(例如 try/finally)来确保所有进程被终止。
-
不要使用 close(),在上下文中使用池:使用 multiProc.Pool(3) 作为 my_pool:
标签: python multiprocessing pool map-function