2017-01-16 14 views
2

Когда я помещаю объект в Queue, нужно ли создавать глубокую копию объекта, а затем помещать в очередь?Является ли многопроцессор python безопасным для размещения объекта?

+0

Я считаю, что объект был маринован до его передачи в процесс приема (т.е. вы не работаете над той же копией) – thebjorn

+0

@Majid, пожалуйста, ответьте и закройте вопрос. – ppasler

ответ

1

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

Объект Queue не делает это автоматически, если вы поместите объект в него.

См Refs

Имейте в виду, что объект должен быть в состоянии маринованные (Multiprocessing Basics)

Это обычно более полезно для быть в состоянии порождать процесс с аргументами, чтобы рассказать ему, что делать. В отличие от потоковой передачи, для передачи аргументов в процесс многопроцессорности, аргумент должен быть способен сериализоваться с использованием pickle. В этом примере каждому работнику присваивается номер, поэтому результат немного интереснее.

+0

Является ли это релевантным, когда ОП использует многопроцессорную обработку? – thebjorn

+0

Что значит? Статья в блоге и страница книги относятся к вопросу о глубокой копии, а не только к многопроцессорности. – ppasler

+1

Извините, меня смутило взаимозаменяемое использование многопоточности и обработки первой ссылки. – thebjorn

2

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

Если вы помещаете объект в очередь и изменяете объект снаружи, а также хотите, чтобы изменения отражались в объекте в очереди, - тогда не создавайте глубокую копию.

В противном случае создайте глубокую копию, чтобы изменения, сделанные снаружи, не отражались на объекте в очереди.

Существует также связанная почта на SO: Python multiprocessing.Queue modifies objects. Если вы проверите принятый ответ, он предложит использовать неизменяемые объекты в очередях (, если вы не используете глубокое копирование).

 Смежные вопросы

  • Нет связанных вопросов^_^