Python многопроцессорный статус работника - PullRequest
0 голосов
/ 07 июля 2011

У меня есть класс с интерфейсом Python для большой библиотеки C ++, которая мне помогает (с большими объемами данных).Я могу изящно остановить работника, отправив ему сигнал, т.е. os.kill( pid,signal.SIGINT ).Итак, я подумал, что смогу запустить работника в p = Process(target=worker.run() ) - который работает - затем в произвольное время прервать работника, отправив ему сигнал - что работает хорошо - но:

Я не могувернуть состояние рабочего!Существует несколько экспортированных функций, которые должны дать мне информацию о том, что делал работник, но (очевидно, после вызова p.join()), все эти функции возвращают исходные значения.Зачем?(Рабочий действительно сделал свою работу, которую я вижу в созданном выходном файле, но я не получаю там информацию, которую я бы хотел во время работы ...)

Использование очереди или диспетчера из многопроцессорной обработки, кажется, не вариант, так как объект на самом деле не «замаскирован», и я не хотел бы копировать все, если мне просто нужно состояние определенной переменной в рабочем,(Я совсем не уверен, что хорошо разбираюсь в этой маринованной концепции ...)

Заранее благодарен за любые предложения!

1 Ответ

1 голос
/ 07 июля 2011

В multiprocessing рабочие работают как отдельные процессы.Каждый процесс имеет свое собственное адресное пространство (память).

Это означает, что если работник изменяет переменную, это изменение не будет видимым для родителя, если только вы не предприняли шаги, чтобы сделать его видимым .

...