Форум сайта python.su
Добрый день.
Мне необходимо провести вычисления, пользуясь книжкой написал следующее:
import re, os, sys
from processing import Process, Queue
numprocs = 3
result = []
def icount():
q = Queue()
tempList = [1446, 966, 869, 1283, 1575, 1675]
def f(i,q):
while True:
if q.empty():
sys.exit()
serv = q.get()
result.append(calculate(serv))
# print str(calculate(serv))
for item in tempList:
q.put(item)
for i in range(numprocs):
p = Process(target=f, args=[i,q])
p.start()
p.join()
def calculate(s_id):
...вычисления по s_id...
return {'s_id': s_id, 'cc': data})
if __name__ == '__main__':
icount()
Офлайн
Если я правильно понял задачу, то как-то так:
import time
from multiprocessing import Process, Queue
def icount(tlist, numprocs):
def f(i):
result = []
while not inq.empty():
result.append((calculate(inq.get())))
time.sleep(1)
outq.put({i: result})
inq = Queue()
outq = Queue()
for item in tlist:
inq.put(item)
processes = []
for i in range(numprocs):
p = Process(target=f, args=[i])
p.start()
processes.append(p)
for p in processes:
p.join()
result = []
while not outq.empty():
result.append(outq.get())
return result
def calculate(s_id):
return {'s_id': s_id, 'cc': s_id}
if __name__ == '__main__':
print icount([1446, 966, 869, 1283, 1575, 1675], 3)
Отредактировано (Май 18, 2010 19:05:03)
Офлайн
Спасибо всё работает.
Такой вопрос, а multiprocessing от processing чем отличается? По скорости вроде одинаково
Офлайн
Это одно и то же. По-моему до 2.6 он был отдельным модулем processing, а в 2.6 его включили как multiprocessing.
Отредактировано (Май 18, 2010 23:43:18)
Офлайн