检查现有进程是否存在-如果存在,则与其通信,否则创建新进程。

2024-06-25 05:26:14 发布

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

我肯定这个问题以前有人问过,但我找不到。在

我写了一个Python程序,给定一个目录,使用一个非常简单的启发式方法来确定如何“解包”其中的内容以及目标目录。在

每当新的下载完成时,就会执行这个程序。如果很多下载在相同的时间完成,我会得到很多进程同时解包。我想通过重写程序的大部分内容,一次只解包一个目录来解决这个问题。在

为了实现这一点,我想使用一个“lock/PID”文件,其中包含当前正在执行的任何程序的PID。如果lock/PID文件存在,新生成的进程应该简单地按照("queue", "D:/some/directory")的行向现有进程发送一些内容,并在完成当前解包后让该进程解包该目标。在

如何在Python中实现这一点?这必须在Windows系统上运行,但最好在GNU/Linux上运行。在


Tags: 文件方法程序目录lock内容queue进程
2条回答

如果只想检查PID文件是否存在,可以使用:os.path

os.path.exists(path) 

既然你已经在使用lockfile by Ben Finney

示例:

 from lockfile.pidlockfile import PIDLockFile
 lock = PIDLockFile('somefile')
 lock.acquire(timeout=3600)
 #do stuff
 lock.release()

您可能希望与正在运行的守护进程通信,您应该让守护进程监听某个套接字,然后从派生的进程向该套接字发送数据。(例如udp套接字)

所以在守护进程中:

^{pr2}$

在客户机上:

import socket
hostname = 'localhost'
port = 12368
message = "hello"
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.sendto( message, (hostname, port) )

如果在同一台计算机上运行所有这些,则可以使用“localhost”作为主机名。在

另一方面,使用multiprocess pipes代替套接字可能是正确的方法,但是我还没有使用它们的经验。 此设置的另一个好处是能够在不同的计算机上运行服务器和客户端。在

相关问题 更多 >