12

When I put an object in Queue, Is it necessary to create deep copy of object and then put in Queue?

Majid
  • 1,673
  • 18
  • 27

1 Answers1

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

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
    Is this relevant when the OP is using multiprocessing? – thebjorn Jan 16 '17 at 10:00
  • 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
  • 1
    Sorry, 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
  • @user1071847 which link is broken? Ich can access all of them. – ppasler Apr 26 '18 at 12:50
  • @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