Code: Alles auswählen
from select import select
import subprocess
from random import randint
from os import fsync
slots = []
writeme = []
jobdict = {}
for i in range(8):
slots.append(subprocess.Popen("./batchworker.py", stdin = subprocess.PIPE))
writeme.append(slots[-1].stdin)
while True:
workers = select([], writeme, [])[1]
for pipe in workers:
if pipe in jobdict:
done = jobdict.pop(pipe)
# WICHITG: hier sollte ein Kindprozess einen job erledigt haben, der Elterprozess macht Aufraeumarbeiten
jobId = randint(0, 99)
pipe.write(str(jobId) + '\n') # und hier bekommt der Kindprozess eine neue Aufgabe
pipe.flush()
# fsync(pipe.fileno()) # das ist auskommentiert, weil es einen anderen fehler verursacht
jobdict[pipe] = jobId
Code: Alles auswählen
while True:
job = int(stdin.readline())
# mach was laaangwieriges nuetzliches damit!
Kommentiere ich fsync nun ein, hängt der Elterprozess sich an der Stelle auf (logisch, irgendwie), wirft aber dann OSError: Invalid argument (weniger logisch)
Wäre sehr dankbar für Ratschläge...