When I put an object in Queue, Is it necessary to create deep copy of object and then put in Queue?
Asked
Active
Viewed 5,923 times
12
-
2I believe the object is pickled before it is transferred to the receiving process (ie you're not working on the same copy) – thebjorn Jan 16 '17 at 10:01
-
@Majid please accept an answer and close the question. – ppasler Jan 17 '17 at 12:35
1 Answers
2
If you can ensure that the Object is only processed in one Thread, this is not a problem. But if you can't, it is recommended to use a deep copy.
The Queue object doesn't do this autmatically if you put the object into it.
See Refs
- Multithreading, Python and passed arguments
- Python in Practice: Create Better Programs Using Concurrency... p.154
Keep in mind that the object need to be able to be pickled (Multiprocessing Basics)
It usually more useful to be able to spawn a process with arguments to tell it what work to do. Unlike with threading, to pass arguments to a multiprocessing Process the argument must be able to be serialized using pickle. This example passes each worker a number so the output is a little more interesting.

ppasler
- 3,579
- 5
- 31
- 51
-
1
-
What do you mean? The blog article and the book page refer to the question of deep copy, not only multiprocessing in common. – ppasler Jan 16 '17 at 10:08
-
1Sorry, I got confused by the first link's interchangeable use of multi threading and processing.. – thebjorn Jan 16 '17 at 10:15
-
`Thread` isn't directly relevant to `multiprocessing`. `multiprocessing.Queue` (at least in python2) makes a copy of the object, as it serializes it, though beware race conditions (see link in other answer). Finally, the book link is broken, as it doesn't contain the referenced page. – user1071847 Apr 18 '18 at 15:12
-
-
@ppasler: the link to _Python in Practice_ isn't broken _per se_, but it's only a book excerpt, and the page of interest isn't included. – user1071847 Apr 26 '18 at 20:08