Python 如何检查函数是否阻塞?

Python 如何检查函数是否阻塞?,python,python-asyncio,python-multithreading,Python,Python Asyncio,Python Multithreading,我正在使用异步工作流,其中包含同步代码。如何检查同步函数是否阻塞,以确保在执行过程中没有中断 异步定义下载\u上传\u xmls\u异步(消息、计数、id、conn1、cursor1、conn2、cursor2): #一些代码 xml=等待请求(urlX,标题) 打印('收到消息') 写入(消息计数、id、conn1、游标1) 打印(‘已写入进度’) 发送消息(“发送”+xml、id、conn2、cursor2) 打印('已发送消息') 本地写入(数据) 等待消息。确认() 在上面的代码中,

我正在使用异步工作流,其中包含同步代码。如何检查同步函数是否阻塞,以确保在执行过程中没有中断


异步定义下载\u上传\u xmls\u异步(消息、计数、id、conn1、cursor1、conn2、cursor2):
#一些代码
xml=等待请求(urlX,标题)
打印('收到消息')
写入(消息计数、id、conn1、游标1)
打印(‘已写入进度’)
发送消息(“发送”+xml、id、conn2、cursor2)
打印('已发送消息')
本地写入(数据)
等待消息。确认()
在上面的代码中,我如何检查函数write和send_message是否是非阻塞的?他们与db一起工作,我无法访问db来检查是否一切都按预期工作。我还可以假设,如果函数write_在本地正常工作,那么我以前的函数也正常工作吗

函数编写和发送消息的作用几乎相同——它们获取数据并使用传递给它们的连接和游标在PostgreSQL数据库上执行查询。函数write_本地写入csv文件

def send_message(message,id,con,cur,**nargs):
参数={
#一些情人
}
联合参数={**params,**nargs}
data=json.dumps(联合参数,确保ascii=False)
当前执行(
#质疑
)
con.commit()

另外,我必须补充的是,连接和游标是用aiopg创建的,因此它们的所有方法都是协程。

如果连接和游标具有协程方法,则编写的
发送消息将不会阻止事件循环

然而,它不会做任何事情,因为它没有等待它调用的协同路由。它需要用
async def
定义,并且需要
等待
cur.execute(…)
cur.commit()
的调用
download\u upload\u xmls\u async
同样无法等待
send\u message
。正确的代码应该如下所示:

async def download\u upload\u xmls\u async(消息、计数、id、conn1、游标1、conn2、游标2):
... 这里有一些代码。。。
#注意等待
等待发送消息(“发送”+xml,id,conn2,cursor2)
#本地写入不需要是协同程序,因为
#它(大概)不会阻塞
本地写入(数据)
等待消息。确认()
#注意“异步定义”
异步def发送消息(消息、id、con、cur、**nargs):
参数={
#一些情人
}
联合参数={**params,**nargs}
data=json.dumps(联合参数,确保ascii=False)
#注意等待
等待当前执行(
#质疑
)
等待con.commit()

你能检查一下
发送消息
写入
等的代码吗?这个问题现在很难回答。
write
send\u message
来自哪里?是你写的吗?一般来说,您应该假设函数执行文档中规定的操作。听起来您的函数是阻塞的。发布定义以供确认。异步函数将从
Async def
开始,而不仅仅是
def
异步函数中的任何阻塞调用都将阻塞执行事件循环的线程。这就是为什么你需要一个类似的东西:----Y.Y.Y.Y.Y.Y.Y.S.考虑阅读和评论。我想这对你有帮助。