Since the order of the asynchronous responses are not guaranteed to be in order if many requests are sent at the same time, the deferred needs to be matched by its TID. In order to do this, the deferred queue should be changed to a deferred dictionary. If a response doesn't match a TID in the queue, it should be logged and dropped.
The following discussion addresses this issue: https://groups.google.com/forum/?fromgroups#!topic/pymodbus/VdcsmIUtHt0