it has a field called screen_id which can either be set to 0, 1 or 2. If it's set to 0 its in the queue, 2 is accepted and 3 is rejected
Huh? You have statuses of 0, 1, 2, but then you state values for 0, 2, & 3???
In any event, you need to create another status to indicate that an image is in the process of being screened. So, when you pull the next image for a screener, you also set it's status so another screener will not get the same image. However, you would also need to account for those instances where a screener does not complete the screening process - otherwise the image would be stuck in limbo. Either a scheduled or manual event to reset all images in the being screened status to the not screened status.
You could use statuses such as this:
0: In queue, Not screened
1: In the process of being screened
2: Rejected
3: Accepted
But, I would use two different fields:
Screened: 0/1 (0 - in queue, 1 being/has been screened)
Accepted: 0/1 (0 - rejected, 1 accepted).
You could then find images that got stuck in the screening process where Sreened = 1, but the accepted value is null.