Avatar billede tommy_carstensen Nybegynder
25. januar 2006 - 14:07 Der er 3 kommentarer og
1 løsning

python, os.fork, cgi, apache, subrutine, parent, child, stdout

Jeg har et spørgsmål relateret til http://www.eksperten.dk/spm/105327

Jeg kører et python script over apache CGI. Jeg vil gerne have skrevet et hurtigt output og derefter lukke forbindelsen mellem browser og server, men ikke terminere en langsom subrutine.

Følgende skriver det hurtige output og lukker forbindelsen, men dræber desværre også subrutinen.

#!/bin/env python

import cgi
import cgitb; cgitb.enable()
import os

OutputID = os.getpid()
Child = os.fork()
if Child:
    ## print det "hurtige" output
    sys.exit(0)

sys.stdin.close()
sys.stdout.close()
sys.stderr.close()
sys.stdout = open(os.path.join(SpoolDir, OutputID), 'w')
sys.stderr = sys.stdout
time.sleep(1)

## eksekver "langsom" subrutine

Enhver hjælp - lille som stor - er MEGET velkommen :-) Maksimum point er vist ikke for meget til dette ekstremt svære spørgsmål...
Avatar billede simonvalter Praktikant
25. januar 2006 - 14:19 #1
ja du ved nok meget mere om python end mig, men det sker vel fordi du kalder
sys.exit(0) af programmet afslutter.
Kan du ikke fjerne den?
Avatar billede simonvalter Praktikant
25. januar 2006 - 14:36 #2
du kan prøve at kigge på os.wait
lad den ene vente på den anden og exit når der ikke er flere child processes.

Her er en artikel der forklarer fork og wait

http://www.informit.com/content/images/art_deitel_creatingprocesses/elementLinks/pythonhtp1_fork_article.pdf
Avatar billede tommy_carstensen Nybegynder
25. januar 2006 - 15:00 #3
sys.exit(0) lukker kun for pid 0. Jeg prøver at kigge på artiklen, som du refererer til...
Avatar billede tommy_carstensen Nybegynder
18. februar 2006 - 15:01 #4
Følgende virker...

pid = os.fork()
if pid:
    ## hurtigt/temporært output
    sys.stdout.flush()
    os.close(0)

os.close(1)
os.close(2)
## langsomt/permanent output
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester