だから、あなたはすでにlockfile by Ben Finney
例のようなものを使用しているので、:
from lockfile.pidlockfile import PIDLockFile
lock = PIDLockFile('somefile')
lock.acquire(timeout=3600)
#do stuff
lock.release()
実行中のデーモンと通信したい場合は、デーモンにソケットを聞かせて、生成されたプロセスからデータをソケット。 (UDPソケットをf.ex)
ので、デーモンに:クライアント上
import socket
import traceback
import Queue
import threading
import sys
hostname = 'localhost'
port = 12368
#your lockfile magick here
# if you want one script to run each time, put client code here instead of seperate script
#if already running somehwere:
#message = "hello"
#sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#sock.sendto(message, (hostname, port))
#sys.exit(0)
que = Queue.Queue(0)
socket_ = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket_.bind((hostname, port))
class MyThread(threading.Thread):
def run(self):
while True: #maybe add some timeout here, so this process closes after a while
# but only stop if que.empty()
message = que.get()
print "handling message: %s" % message
#handle message
t = MyThread()
t.start()
while True:
try:
#blocking call
message, _ = socket_.recvfrom(8192) #buffer size
print "received message: %s" % message
#queue message
que.put(message)
except (KeyboardInterrupt, SystemExit):
raise
except:
traceback.print_exc()
:あなたはすべて実行している場合
import socket
hostname = 'localhost'
port = 12368
message = "hello"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(message, (hostname, port))
あなたは、ホスト名のための 'ローカルホスト' を使用することができますこれを同じマシンで実行します。
一方、ソケットの代わりにmultiprocess pipesを使用するのが適切な方法かもしれませんが、私はまだそれらの経験がありません。 この設定には、別のマシン上でサーバーとクライアントを実行できるという利点があります。
ダウンロードが完了したときに実行されるプログラム、つまりPythonスクリプト、またはスクリプトが実行するものを待ちますか?あなたは新しいプロセスをどのように始めることを手配しますか? –
ダウンロードが完了すると、私のPythonプログラムが実行されます。唯一の引数は、ダウンロードされたディレクトリへのパスです。 – damd
ダウンロードが完了したら、あなたのPythonプログラムを実行させる原因は何ですか? –