Найти - Пользователи
Полная версия: python processing
Начало » Python для новичков » python processing
1
alexlp
Добрый день.
Мне необходимо провести вычисления, пользуясь книжкой написал следующее:

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()
Исходные данные: tempList =
Далее элемент из списка считается в calculate(). Все работает (если как по книжке заканчивается print result), но мне надо получить список из всех “вычислений”. Программа создает число result равное числу numprocs следовательно result.append() получается 3 набора данных (по примеру). Как всё в единый список свести?
Ed
Если я правильно понял задачу, то как-то так:
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)
PS: sleep(1) я вставил, чтобы результат был покрасивше. Если его убрать, то как правило один процесс всю входную очередь выедает.
alexlp
Спасибо всё работает.

Такой вопрос, а multiprocessing от processing чем отличается? По скорости вроде одинаково
Ed
Это одно и то же. По-моему до 2.6 он был отдельным модулем processing, а в 2.6 его включили как multiprocessing.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB