Apache 2.2 / mod_python 3.2.8 で Python コードを実行しようとしています。最終的に、コードは os.fork() を実行し、2 つの個別の長期実行プロセスを生成します。これらの各プロセスは、並列フローで起こりうる衝突を回避するために、クラスの個別のインスタンスを作成する必要があります。
class Foo(object):
pass
kidprocs = []
for kid in ('kid1', 'kid2'):
pid = os.fork()
if pid:
# parent
kidprocs.append(pid)
time.sleep(5)
else:
# child
fooobj = Foo()
print "Starting %s in sub-process %s" % (kid, os.getpid())
print "Kid fooobj: %s" % repr(fooobj)
os._exit(0)
for kidproc in kidprocs:
os.waitpid(kidproc, 0)
これらの印刷出力は次のようになります。
Starting kid1 in sub-process 20906
foo obj: <__main__.Foo instance at 0xb7da5fec>
Starting kid2 in sub-process 20909
foo obj: <__main__.Foo instance at 0xb7da5fec>
ご覧のとおり、両方のサブプロセスで同じオブジェクトを取得しました。なぜ mod_python の下でこのようになっているのか、また別のインスタンスを取得する方法はありますか? どうもありがとう。