The following code makes no use of Simpy but it might illustrate what you need. If either or both the VIPs and normal customers need not be kept in their arrival order then you could put them in a Python set, as I have done here for VIPs. If on the other hand they have to be served in FIFO order then you could use a Python queue, as I have done here for Normals. I've added a few elements to each container. (Obviously your code would be adding some kind of Simpy objects, rather than single characters.) If a uniformly distributed pseudorandom deviate falls below p then a Normal is selected (which is bass-ackwards to what you want, I think) and returned; otherwise, a VIP.
>>> VIPs = set (['1', '2', '3'])
>>> from queue import Queue
>>> Normals = Queue()
>>> Normals.put('a')
>>> Normals.put('b')
>>> Normals.put('c')
>>> p = 0.75
>>> def selectCustomer(VIPs, Normals, p):
... from random import random
... if random() < p:
... return Normals.get()
... else:
... return VIPs.pop()
...
>>> selectCustomer(VIPs, Normals, p)
'2'
>>> selectCustomer(VIPs, Normals, p)
'a'
>>> selectCustomer(VIPs, Normals, p)
'1'
>>> selectCustomer(VIPs, Normals, p)
'b'