Когда я помещаю объект в Queue, нужно ли создавать глубокую копию объекта, а затем помещать в очередь?Является ли многопроцессор python безопасным для размещения объекта?
ответ
Если вы можете гарантировать, что объект обрабатывается только в одном потоке, это не проблема. Но если вы не можете, рекомендуется использовать глубокую копию.
Объект Queue не делает это автоматически, если вы поместите объект в него.
См Refs
- Multithreading, Python and passed arguments
- Python in Practice: Create Better Programs Using Concurrency... p.154
Имейте в виду, что объект должен быть в состоянии маринованные (Multiprocessing Basics)
Это обычно более полезно для быть в состоянии порождать процесс с аргументами, чтобы рассказать ему, что делать. В отличие от потоковой передачи, для передачи аргументов в процесс многопроцессорности, аргумент должен быть способен сериализоваться с использованием pickle. В этом примере каждому работнику присваивается номер, поэтому результат немного интереснее.
Является ли это релевантным, когда ОП использует многопроцессорную обработку? – thebjorn
Что значит? Статья в блоге и страница книги относятся к вопросу о глубокой копии, а не только к многопроцессорности. – ppasler
Извините, меня смутило взаимозаменяемое использование многопоточности и обработки первой ссылки. – thebjorn
put
Операция в очереди не создает копию (или глубокую копию) объекта, поэтому, когда вы создаете глубокую копию или полностью не зависит от поведения, которое вы ожидаете и хотите реализовать.
Если вы помещаете объект в очередь и изменяете объект снаружи, а также хотите, чтобы изменения отражались в объекте в очереди, - тогда не создавайте глубокую копию.
В противном случае создайте глубокую копию, чтобы изменения, сделанные снаружи, не отражались на объекте в очереди.
Существует также связанная почта на SO: Python multiprocessing.Queue modifies objects. Если вы проверите принятый ответ, он предложит использовать неизменяемые объекты в очередях (, если вы не используете глубокое копирование).
- 1. Является ли итерация над потоком файлового объекта Python безопасным?
- 2. Является ли следующее безопасным?
- 3. Является ли это безопасным?
- 4. Является ли этот код кода Python безопасным?
- 5. Является ли const_cast безопасным?
- 6. Является ли замок() безопасным?
- 7. Является ли java.nio.file.Files.write (...) безопасным?
- 8. Является ли KnockoutJS «глобальным безопасным»?
- 9. Является ли AmazonSimpleNotificationServiceClient поточно-безопасным?
- 10. Является ли shutil.make_archive потоком безопасным?
- 11. Является ли ядро JupyterHub безопасным для пользователей?
- 12. Является ли создание объекта статической функции-объекта потоком-безопасным?
- 13. Является ли com.google.cloud.datastore.Datastore потоком безопасным?
- 14. Является ли LIBSVM потоком безопасным
- 15. Адрес размещения объекта Python
- 16. Является ли приложение приложения для демонстрации приложений Python Tornado безопасным?
- 17. Является ли HTML5 безопасным для Javascript игр (более безопасным)?
- 18. Является ли поток потока безопасным?
- 19. Является ли NSPersistentStoreCoordinator Thread безопасным?
- 20. Является ли мой eval() безопасным?
- 21. Является ли метод getMethod безопасным?
- 22. Является ли java.io.BufferedOutputStream безопасным для использования?
- 23. Является ли utf-8 безопасным для http?
- 24. Является ли LXC достаточно безопасным для IaaS?
- 25. Является ли NS_ROOT_CLASS «безопасным» для разработки IOS?
- 26. Является ли этот eval() безопасным для питона?
- 27. Является ли символ «&» безопасным для атак xss?
- 28. Является ли PHP завиток для HTTPS безопасным?
- 29. Является ли AesCryptoServiceProvider.GenerateKey безопасным для использования?
- 30. Является ли JavaScript безопасным для вас языком?
Я считаю, что объект был маринован до его передачи в процесс приема (т.е. вы не работаете над той же копией) – thebjorn
@Majid, пожалуйста, ответьте и закройте вопрос. – ppasler