confused with os.fork()

Diez B. Roggisch deets at nospam.web.de
Wed Nov 25 17:15:50 EST 2009


Sandy schrieb:
> Hi all,
> I am a little bit confused about os.fork().
> Say I have the following code.
> 
> import os
> a = ['a','b','c','d','e']
> 
> for i in xrange(len(a)):
>     pid = os.fork()
>     if not pid:
>         print a[i]
>         os._exit(0)
> 
> From most of the tuts and examples I saw online, I expect it to print
> a,b,c,d,e.
> Sometimes (very rare) it prints something like this:
> ab
> c
> d
> e
> I thought there is no way a parent process can enter the 'if'.
> Can anyone explain this behaviour? Is it the case where parent is
> forking a child even before the previous child is printing? In that
> case is there a way to prevent that? I can use os.wait(), but I don't
> want to wait till the child is finished, just don't want to mix the
> child processes, that's it.

Yes, that's the case - you have a race-condition here. Two childs at the 
same time write, interleaving their data.

To prevent this, you can use file-locking.

http://docs.python.org/library/fcntl.html#fcntl.lockf

Diez



More information about the Python-list mailing list