Increment/decrement 使用 python 多处理模块的全局变量
Increment/decrement global variable using python multiprocessing module
我正在尝试启动多个进程来并行执行某些任务,并希望每次每个进程执行方法 X() 时一个全局变量递减 1。
我尝试查看 multiprocessing.Value 方法,但不确定这是否是唯一的方法。有人可以提供一些代码片段来执行此操作吗?
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
、initargs
Pool()
的参数)。
我正在尝试启动多个进程来并行执行某些任务,并希望每次每个进程执行方法 X() 时一个全局变量递减 1。
我尝试查看 multiprocessing.Value 方法,但不确定这是否是唯一的方法。有人可以提供一些代码片段来执行此操作吗?
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
、initargs
Pool()
的参数)。