This page lists all function and method calls that the module auto-detects as blocking. If your code uses any of these, . and . become available.
Note: Detection is case-insensitive.
Note: You can always use the decorator to explicitly mark code as blocking when AST detection doesn't catch it (for things like heavy, time consuming CPU bound work)
These are matched exactly (full call path).
time.sleepsleeptiming .sleepsuitkaise .timing .sleepopenreadwritereadlinereadlineswritelinesos.reados.writeos.popenos.systemsubprocess.run subprocess.callsubprocess.check_callsubprocess.check_outputsubprocess.popenrequests.getrequests.postrequests.putrequests.deleterequests.patchrequests.headrequests.optionsrequests.requesthttpx.gethttpx.posthttpx.puthttpx.deletehttpx.patchhttpx.headhttpx.optionshttpx.requesthttpx.streamurllib.request.urlopenurlopenurllib3.poolmanager.requesturllib3.connectionpool.requesturllib3.requestsocket.socketsocket.create_connectionpathlib.path.openpathlib.path.read_textpathlib.path.read_bytespathlib.path.write_textpathlib.path.write_bytesshutil.copyshutil.copy2shutil.copyfileshutil.copytreeshutil.moveshutil.rmtreesqlite3.connectpsycopg2.connectpsycopg.connectpymysql.connectmysql.connector.connectmysqldb.connectpyodbc.connectduckdb.connectpymssql.connectoracledb.connectcx_oracle.connectsnowflake.connector.connectredis.from_urlredis.redis.from_urlredis.strictredis.from_urlredis.sentinel.sentinelpymongo.mongoclientpymongo.mongo_client.mongoclientboto3.clientboto3.resourceboto3.session.session.clientboto3.session.session.resourcekafka.kafka_producerkafka.kafkaconsumerconfluent_kafka.producerconfluent_kafka.consumerpika.blockingconnectionelasticsearch.elasticsearchopensearchpy.opensearchcursor.executecursor.executemanycursor.fetchonecursor.fetchallcursor.fetchmanyconnection.commitconnection.rollbackIf any call ends with one of these method names, it's considered blocking.
sleepwaitwait_forjoinacquirerecvrecvfromsendsendtosendallacceptconnectlistenreadreadlinereadlineswritewritelinesopenread_textread_byteswrite_textwrite_bytesfetchfetchonefetchallfetchmanyexecuteexecutemanycommitrollbackget_objectput_objecthead_objectlist_objectslist_objects_v2delete_objectcopy_objectupload_fileupload_fileobjdownload_filedownload_fileobjlist_bucketscreate_bucketdelete_bucketget_itemput_itemupdate_itemdelete_itembatch_get_itembatch_write_itemqueryscansend_messagereceive_messagedelete_messagepublishsubscribefindfind_oneinsert_oneinsert_manyupdate_oneupdate_manyreplace_onedelete_onedelete_manyaggregatecount_documentsdistinctbulk_writeblpopbrpopbrpoplpushbzpopminbzpopmaxxreadxreadgroupget_messagesearchindexbulkmsearchdelete_by_queryupdate_by_queryproducesendpollflushbasic_publishbasic_consumebasic_getexecuterun querywrite_pointswrite_apimapimapstarmapshorttripThese method names are only considered blocking when the call path contains an I/O context keyword.
getsetfindinsertupdatedeletequeryscanrequestsendrecvreadwriteexecutecommitrollbackFor a broad method to trigger blocking detection, the call path must contain one of these:
dbdatabasecursorconnconnectionenginesessionpoolpsycopgpostgresmysqlsqlitemongopymongoredissqlalchemyodbcduckdbboto3botocores3sqssnsdynamodbkinesislambdakafkarabbitmqamqppikaelasticsearchopensearchsearchcassandraneo4jinfluxinfluxdbclickhousehttphttpsrequestrequestshttpxurllibsocketsockclientchanneltime.sleep(1) # exact match: time.sleep
requests.get(url) # exact match: requests.get
cursor.fetchall() # pattern match: fetchall
self.db.execute(query) # broad match: execute + db context
s3_client.get_object(...) # pattern match: get_object
my_dict.get("key") # broad method, no I/O context
data.update({"a": 1}) # broad method, no I/O context
calculate() # unknown function
from suitkaise import sk , blocking
@sk
@blocking
def cpu_intensive():
# pure computation, no I/O calls
return sum(x**2 for x in range(10_000_000))