многопроцессорный менеджер python
-
07-07-2019 - |
Вопрос
Моя проблема:
У меня есть 3 процесса, которые хотели бы поделиться конфигурацией, загруженной из одного класса, и несколько очередей. Я хотел бы порождать другой процесс как multiprocessing.manager для обмена этой информацией. Р>
Как я могу это сделать? Может ли кто-нибудь купить пример кода, избегая использования глобальных переменных и используя класс диспетчера многопроцессорности?
Документы Python не были так полезны: - (
Решение
Я нашел этот конкретный раздел в Полезны многопроцессорные документы Python. Следующая программа:
from multiprocessing import Process, Queue, current_process
import time
def f(q):
name = current_process().name
config = q.get()
print "%s got config: %s" % (name, config)
print "%s beginning processing at %s" % (name, time.asctime())
time.sleep(5)
print "%s completing processing at %s" % (name, time.asctime())
if __name__ == '__main__':
q = Queue()
processes = []
cfg = { 'my' : 'config', 'data' : 'here' }
for i in range(3):
p = Process(target=f, args=(q,))
processes.append(p)
p.start()
q.put(cfg)
for p in processes:
p.join()
демонстрирует основной скрипт (который является «диспетчером многопроцессорности» в вашем вопросе), создающий 3 процесса и отправляющий каждому из них конфигурацию (показанную здесь в виде словаря).
Каждый процесс читает конфигурацию, выполняет ее обработку (здесь, просто спят в течение 5 секунд), а затем завершается. Результат выполнения этого сценария:
Process-1 got config: {'my': 'config', 'data': 'here'}
Process-1 beginning processing at Tue Jun 23 23:34:23 2009
Process-2 got config: {'my': 'config', 'data': 'here'}
Process-2 beginning processing at Tue Jun 23 23:34:23 2009
Process-3 got config: {'my': 'config', 'data': 'here'}
Process-3 beginning processing at Tue Jun 23 23:34:23 2009
Process-1 completing processing at Tue Jun 23 23:34:28 2009
Process-2 completing processing at Tue Jun 23 23:34:28 2009
Process-3 completing processing at Tue Jun 23 23:34:28 2009