I2C Communication Open drain benefits vs Push pull
"Two devices can't communicate at the same time, right? And are the
  two devices slaves? or masters?"


Two devices can communicate at the same time on the same bus (with eachother), but not more, no matter their role.

On I2C, only the master(s) can start communcations. If a masters wants to do so, he can check wether the SDA pin is pulled low (for the duration of 2x I2C cycle time), which means another master is currently active, so it can wait for the other master/slave to finish before transmitting itself.


  I don't understand how they are saying Open drain is better than push
  pull config? Please provide an example how push pull is dangerous when
  compared to Open drain in I2C?


Consider the scenario with push/pull:
Imagine two masters and one slave on the bus. How could a master check whats happenning on the bus - i.e. is another IC currently talking?
If you configure the master(s) to pull SDA to HIGH while they are idle, and then tell one master to start sending data, he will pull SDA low - and you have a short circuit.

So the solution is not to pull SDA to HIGH by any of the ICs, but have it pulled high by a pull-up resistor. Now your ICs only need to pull SDA to LOW to do their work (and the other ICs can sense that), and leave SDA floating otherwise (which will be pulled up by the resistor). This way, no short circuits are possible, as none of the ICs are supplying current to SDA, they only sink the (very small) current supplied through the pull-up to do their signalling.