使用python多处理模块的递增/递减全局变量



我试图启动多个进程来并行化某些任务,并希望每个进程每次执行方法X()时,一个全局变量递减1。

我试着看看多进程。值方法,但不确定这是否是唯一的方法。谁能提供一些代码片段来做这个?

from multiprocessing import Pool, Process
def X(list):
  global temp
  print list
  temp = 10
  temp -= 1
  return temp
list = ['a','b','c']
pool = Pool(processes=5)
pool.map(X, list)

使用全局变量,每个进程都有自己的全局变量副本,这并不能解决共享全局变量值的问题。我相信,我们需要一种共享的记忆系统,但我不知道该怎么做。由于

counter变量移到主进程中,即避免在进程之间共享该变量:

for result in pool.imap_unordered(func, args):
    counter -= 1
一旦相应的结果(func(arg))可用,

counter就递减。下面是一个完整的代码示例:

#!/usr/bin/env python
import random
import time
import multiprocessing
def func(arg):
    time.sleep(random.random())
    return arg*10
def main():
    counter = 10
    args = "abc"
    pool = multiprocessing.Pool()
    for result in pool.imap_unordered(func, args):
        counter -= 1
        print("counter=%d, result=%r" % (counter, result))
if __name__ == "__main__":
    main()

另一种方法是将multiprocessing.Value()对象传递给每个工作进程(使用initialize, initargsPool()的参数)。

相关内容

  • 没有找到相关文章

最新更新