python的共享和独占命名锁

2024-05-20 10:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用命名锁(例如文件锁)同步python线程和进程(不需要相互关联)。最好是读写器锁。我试过了fcntl.植绒(它同时具有独占锁和共享锁获取),但它没有提供所需的锁级别-Does python's fcntl.flock function provide thread level locking of file access?

到目前为止,我的解决方案是在memcached(或mmap'ed锁定文件)中使用lockfile。Lockfile将同步访问,memcached将计数读写器。在

是否有更好/更快的解决方案?你知道有什么项目已经解决了这个问题吗?在


Tags: 文件进程functionmemcached解决方案级别线程thread
1条回答
网友
1楼 · 发布于 2024-05-20 10:26:45

下面是一个链接http://semanchuk.com/philip/,其中包含实现posix和systemv信号量的库。你可以用其中一个。但是要注意,在持有信号量的进程死机而没有释放信号量的情况下,所有其他进程都会受到阻碍。如果您担心这一点-您可以使用带有UNDO的systemv信号量,但是它们会稍微慢一点。另外,如果您碰巧使用了SystemV共享内存原语(请记住,它们位于内核中,并且在进程终止后继续存在),您必须显式地从系统中删除它们。在

如果你不怕进程死亡,整个系统的死锁和进程是相关的——你可以使用python的信号量(它们是posix命名的信号量)

作为相关问题(fcntl)链接的页面并没有说明fcntl不适合线程间锁定。据说fcntl关心fds。所以,只要打开锁定文件并为每个锁实例获取新的fd,就可以使用fcntl进行进程间和线程间锁定。在

您还可以将fcntl用于进程间,而python的信号量用于线程间锁定。在

最后:重新思考你的架构。锁定通常不好。将资源委派给一个进程,该进程将在不锁定的情况下处理它。维护起来会简单得多。相信我。在

相关问题 更多 >