【问题标题】:append to the same list with multiprocessing - python使用多处理附加到同一个列表 - python
【发布时间】:2018-08-31 07:35:30
【问题描述】:

我希望将不同的进程附加到同一个列表中:

import multiprocessing as mp

def foo(n,L):
    a
    L.append(n)

pool = mp.Pool(processes=2)
manager = mp.Manager()

L= manager.list()

l=[[1,2],[3,4],[5,6],[7,8]]

[pool.apply_async(foo, args=[n,L]) for n in l]

然而,

>> print L
[]

我做错了什么?

编辑:问题是我的原始代码中有回溯,它没有打印在屏幕上。例如,如果我运行上面的代码并且 a 不存在,则不会评估其余代码,但不会引发异常。有没有办法进行多处理打印回溯以便我可以调试代码?

【问题讨论】:

  • [pool.apply_async(foo, args=[n,L]) for n in l] 得到[<multiprocessing.pool.ApplyResult at 0x7ff72859c150>, <multiprocessing.pool.ApplyResult at 0x7ff72859c410>, <multiprocessing.pool.ApplyResult at 0x7ff72859c510>, <multiprocessing.pool.ApplyResult at 0x7ff72859c590>], print L 得到[[1, 2], [3, 4], [5, 6], [7, 8]] `,
  • 如果您将多处理代码放在“主”子句中,则多处理在更多系统上的工作更可靠,就像文档中的所有示例一样。 docs.python.org/3/library/…
  • 看来问题是我的代码中有错误但没有打印回溯。我已经编辑了我的问题

标签: python list append multiprocessing


【解决方案1】:

因为您还没有等待任务完成。

import multiprocessing as mp

def foo(n,L):
    L.append(n)

pool = mp.Pool(processes=2)
manager = mp.Manager()

L= manager.list()

l=[[1,2],[3,4],[5,6],[7,8]]

[pool.apply_async(foo, args=[n,L]) for n in l]
pool.close()
pool.join()
print(L)

【讨论】:

  • @Straw:问题似乎是我的代码中有错误,但没有打印回溯。我已经编辑了我的问题
  • 您可以通过pool.apply(...) 调试您的代码。这将以阻塞模式运行您的代码,并打印回溯。
猜你喜欢
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多