python:锁定,但基于参数

python:锁定,但基于参数,python,locking,Python,Locking,为了线程安全,我想使用一些东西来锁定python中的代码,但是基于我传递的特定参数 例如,我的应用程序被许多拥有自己id的用户使用 我只想为同一个用户锁定这部分代码 因此,如果id为123的用户通过带有锁的代码部分,则该锁仅对相同的id为123的用户有效,而如果该用户通过用户345,则该用户拥有自己的独立锁 有什么办法吗?因为我读过线程模块的锁,但是我没有找到任何东西使锁有效,只有当有相同的传递参数时,我有点困惑。您想锁定代码,但仍然允许其他用户使用相同的代码,只是使用不同的锁?这违背了锁的目的

为了线程安全,我想使用一些东西来锁定python中的代码,但是基于我传递的特定参数

例如,我的应用程序被许多拥有自己id的用户使用

我只想为同一个用户锁定这部分代码

因此,如果id为123的用户通过带有锁的代码部分,则该锁仅对相同的id为123的用户有效,而如果该用户通过用户345,则该用户拥有自己的独立锁


有什么办法吗?因为我读过线程模块的锁,但是我没有找到任何东西使锁有效,只有当有相同的传递参数时,我有点困惑。您想锁定代码,但仍然允许其他用户使用相同的代码,只是使用不同的锁?这违背了锁的目的,不再是线程安全的。您真正想要的是单个锁的
dict
。比如说,
d={userid:Lock()表示[123345,…]中的userid}
。然后用户123必须获得
d[123]
,用户345必须获得
d[345]
,等等(正如Chrismon Chin所提到的,这个锁实际上保护的是另一件事。)谢谢。我需要这样做,因为我希望一个用户只执行一个操作,并且在前一个操作完成并响应后可以执行以下操作。因此,另一个线程可以同时为另一个用户运行该命令,但不能为他运行,因为他已经在进行一个操作。我有点困惑。您想锁定代码,但仍然允许其他用户使用相同的代码,只是使用不同的锁?这违背了锁的目的,不再是线程安全的。您真正想要的是单个锁的
dict
。比如说,
d={userid:Lock()表示[123345,…]中的userid}
。然后用户123必须获得
d[123]
,用户345必须获得
d[345]
,等等(正如Chrismon Chin所提到的,这个锁实际上保护的是另一件事。)谢谢。我需要这样做,因为我希望一个用户只执行一个操作,并且在前一个操作完成并响应后可以执行以下操作。因此,另一个线程可以同时为另一个用户运行该命令,但不能为他运行,因为他已经有一个正在进行的操作