dispy
                                
                                
                                
                                    dispy copied to clipboard
                            
                            
                            
                        ProvisionalResults overwriting mutable job instances in worker_Q
I've stumbled across a little bit of an issue with how the _Cluster class adds items to its worker_Q.
Around line:
https://github.com/pgiri/dispy/blob/master/py3/dispy/init.py#L1851
the job object reference is mutated with the result/status/etc and is put into the Queue. The issue arises when additional results for the same job (i.e. ProvisionalResults in my case) arrive before the consumer can process the one or ones already in the Queue. In this case, the job instance is shared, and the entries in the queue are (I assume) accidentally mutated.
A similar issue may arise here, but I am less certain about this code path: https://github.com/pgiri/dispy/blob/master/py3/dispy/init.py#L1779
What I've done locally to "fix" this, is added a .clone() method to the DispyJob class, as below, and instead mutate/enqueue a clone of the job instance. I wouldn't be surprised if there is a better approach, but here is my implementation of the clone method in case it is helpful at all:
    def clone(self):
        _clone = DispyJob(self._args, self._kwargs)
        _clone.id = self.id
        _clone.result = self.result
        _clone.stdout = self.stdout
        _clone.stderr = self.stderr
        _clone.exception = self.exception
        _clone.submit_time = self.submit_time
        _clone.start_time = self.start_time
        _clone.end_time = self.end_time
        _clone.status = self.status
        _clone.ip_addr = self.ip_addr
        _clone.finish = self.finish
        _clone._dispy_job_ = self._dispy_job_
        return _clone
Thanks you guys for creating this awesome tool! I've really been amazed at what dispy can do 👍
I believe fix committed should handle this case. Please test and confirm so new version can be released.
Thank you for identifying the cause and potential fix, which made it easy to understand the problem.
👍 Your fix seems to work perfectly for me. Thanks for the super fast turn-around!