我正在用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