wiki:BlockingFunctions

 Visit forum
 Forum search "BlockingFunctions"
 Discuss "BlockingFunctions"

Blocking Functions

The following functions can cause the current thread to block (i.e. can take seconds or minutes to complete):

The following operations can block, because they need to look up a hostname, or retrieve a remote resource. To do non-blocking retrievals, use select.select or socket.setblocking(0).

socket.accept
socket.close
socket.connect
socket.getfqdn
socket.getaddrinfo
socket.gethostbyname
socket.gethostbyaddr
socket.getnameinfo
socket.getnameinfo_ex
socket.recv
socket.recv_into
socket.recvfrom
socket.recvfrom_into
socket.send
socket.sendall
socket.sendto
urllib.urlopen
urllib.urlretrieve

The following operations can block, because disk-access can be slow or even across a network. Even writing to stdin/stdout/stderr can block, or reads from another process. Arno says: these should be safe to use as long as your not on a network file system. If we can't use these, things get complicated ;o)

file.close
file.flush
file.open
file.read
file.readlines
file.truncate
file.write
file.writelines
file.xreadlines
os.access
os.chdir
os.chmod
os.chown
os.close
os.fchdir
os.fdopen
os.fstat
os.fstatvfs
os.fsync
os.ftruncate
os.listdir
os.lstat
os.makedirs
os.mkdir
os.mkfifo
os.mknod
os.open
os.read
os.readlink
os.remove
os.removedirs
os.rename
os.renames
os.rmdir
os.stat
os.stat_float_times
os.statvfs
os.symlink
os.tempnam
os.tmpfile
os.tmpnam
os.walk
os.write

The following commands can block because they wait for something to finish (for some, a timeout of zero can be used to avoid blocking):

os.system
os.wait
os.wait3
os.wait4
os.waitpid
threading.Thread.join

The following commands can block because they (can) wait for time to pass:

select.select
time.sleep

The following commands can block because they need some (user-created) lock. Some of these can be explicitly set to non-blocking:

thread.allocate_lock.acquire
threading.BoundedSemaphore.acquire
threading.Condition.acquire
threading.Condition.wait
threading.Event.wait
threading.Lock.acquire
threading.RLock.acquire
threading.Semaphore.acquire