This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author AlainCALMET
Recipients AlainCALMET
Date 2014-10-10.11:53:12
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1412941993.11.0.215678273609.issue22600@psf.upfronthosting.co.za>
In-reply-to
Content
Hello,
I have to find the right order of a list, for example
try = [0,1,2,3,4,5,6,7,8,9]
try = [0,1,2,3,4,5,6,7,9,8]
try = [0,1,2,3,4,5,6,8,7,9]
and so on... in this example there are factorial(10) = 3,6 million possible order to test.
The results with be all the list  'try'  that match with the test.

To go faster
- I use mutiproceesiing
- I define   rightorder = Queue() 
- I define a function test   with a line  rightorder.put(try)
- I wait for all the processes are finished  p.join()
- Then I read all the results in the main programm   rightorder.get()

The problem is that on exactly the same example
- the rightorder.put() found by the process are always good
- but the rightorder.get() in the main programm can be different (randomly).

I first believed that when 2 processes call the function  rightorder.put(try)  at the same time, the lists ares mixed together in the Queue().

But even when I force cpu_count() to 1 (mono process) I still have the problem.

To solve the problem I converted the list try=[2,3,0,4,2,9,7,8,1,5]
in a string try2="2304297815"
and since now  rightorder.put(try)  and  rightorder.get()  always give the same results.

So I suppose that in multiprocessing with a Queue() rightorder.put(try)  works if try is a number or a string
but doesn't works if try is a list.
History
Date User Action Args
2014-10-10 11:53:13AlainCALMETsetrecipients: + AlainCALMET
2014-10-10 11:53:13AlainCALMETsetmessageid: <1412941993.11.0.215678273609.issue22600@psf.upfronthosting.co.za>
2014-10-10 11:53:13AlainCALMETlinkissue22600 messages
2014-10-10 11:53:12AlainCALMETcreate