【发布时间】:2015-12-31 15:41:10
【问题描述】:
我正在用 python 编写我的第一个多处理程序。
我想创建一个要处理的值列表,8 个进程(操作系统 CPU 核心数)将消耗并处理该值列表。
我写了以下python代码:
__author__ = 'Rui Martins'
from multiprocessing import cpu_count, Process, Lock, Value
def proc(lock, number_of_active_processes, valor):
lock.acquire()
number_of_active_processes.value+=1
print "Active processes:", number_of_active_processes.value
lock.release()
# DO SOMETHING ...
for i in range(1, 100):
valor=valor**2
# (...)
lock.acquire()
number_of_active_processes.value-=1
lock.release()
if __name__ == '__main__':
proc_number=cpu_count()
number_of_active_processes=Value('i', 0)
lock = Lock()
values=[11, 24, 13, 40, 15, 26, 27, 8, 19, 10, 11, 12, 13]
values_processed=0
processes=[]
for i in range(proc_number):
processes+=[Process()]
while values_processed<len(values):
while number_of_active_processes.value < proc_number and values_processed<len(values):
for i in range(proc_number):
if not processes[i].is_alive() and values_processed<len(values):
processes[i] = Process(target=proc, args=(lock, number_of_active_processes, values[values_processed]))
values_processed+=1
processes[i].start()
while number_of_active_processes.value == proc_number:
# BUG: always number_of_active_processes.value == 8 :(
print "Active processes:", number_of_active_processes.value
print ""
print "Active processes at END:", number_of_active_processes.value
而且,我有以下问题:
【问题讨论】:
-
Daniel Sanchez,我认为多处理与线程不同,GIL 并没有被多处理锁定。见:stackoverflow.com/questions/3044580/…
-
是的,我只是在发布了我的愚蠢之后才想到它,对不起:/
标签: python python-2.7 multiprocessing