我正在用python编写我的第一个多处理程序。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
而且,我有以下问题:
丹尼尔桑切斯,我认为多处理是不同的线程,并且GIL没有与多处理锁定。 请参阅:http://stackoverflow.com/questions/3044580/multiprocessing-vs-threading-python?rq=1 –
是的,我只是在发布我的愚蠢之后想过它,对不起:/ – Netwave