【发布时间】:2011-06-15 15:57:30
【问题描述】:
我一直在花一些时间试图理解多处理,尽管它的一些细节让我未经训练的头脑无法理解。我已经能够得到一个池来返回一个简单的整数,但是如果该函数不只是像我能找到的所有示例那样返回一个结果(即使在documentation 中,它也是一些我无法找到的晦涩示例很明白。
这是我尝试开始工作的一个示例。但是,我无法让它按预期工作,而且我确信有一个简单的原因。我可能需要使用队列或共享内存或管理器,但在阅读文档时,我似乎无法理解它的实际含义和作用。到目前为止,我所能理解的只是池函数。
另外,我正在使用一个类,因为我需要避免使用this question's answer 中的全局变量。
import random
class thisClass:
def __init__(self):
self.i = 0
def countSixes(myClassObject):
newNum = random.randrange(0,10)
#print(newNum) #this proves the function is being run if enabled
if newNum == 6:
myClassObject.i += 1
if __name__ == '__main__':
import multiprocessing
pool = multiprocessing.Pool(1) #use one core for now
counter = thisClass()
myList = []
[myList.append(x) for x in range(1000)]
#it must be (args,) instead of just i, apparently
async_results = [pool.apply_async(countSixes, (counter,)) for i in myList]
for x in async_results:
x.get(timeout=1)
print(counter.i)
有人可以愚蠢地解释需要做什么,以便我最终了解我缺少什么以及它做了什么吗?
【问题讨论】:
-
重读你的问题,我现在明白你认为使用类可以避免this problem。它不会。如果您真的想在进程之间共享内存(文档本身不建议这样做!),那么您必须使用
multiprocessing的内置数据类型,如here 所述。
标签: python python-3.x multiprocessing pool python-2.7