osx上のpython-multiprocessingを使用して、インポート前に新しいプロセス内にモジュールが存在します。ここ
は例です:窓/ Linux上
MAC上のマルチプロセッシング・インポート・モジュール
import multiprocessing
import sys
import os
print 'importing module'
def main():
import uuid
print 'setting var'
uuid.some_variable = True
def process(name):
print 'uuid module loaded:', 'uuid' in sys.modules
print 'process pid', os.getpid()
import uuid
var = uuid.some_variable
print 'var exists on mac', var
if __name__ == '__main__':
print 'main pid', os.getpid()
main()
p = multiprocessing.Process(target=process, args=('test',))
p.start()
p.join()
出力は、私が期待するものです。スクリプトのインポートは二回、uuid.some_variableが存在しない、とUUIDをインポートする前にロードされていません。しかしOSX上で、スクリプトは一度だけインポートします
importing module main pid 4352 setting var importing module uuid module loaded: False process pid 4988 AttributeError: 'module' object has no attribute 'some_variable'
、UUIDは、インポートする前にロードされ、uuid.some_variableが存在します新しいプロセスで:
importing module main pid 4399 setting var uuid module loaded: True process pid 4400 var exists on mac True
どういうわけか、メイン処理からUUIDモジュールは、それをインポートすることなく、サブプロセスに入りました。
何か不足していますか、これはバグですか、これを行うには十分な理由がありますか?
モジュールはどのようにしてサブプロセスに入りましたか?
Arch Linux(Python 3.2では '2to3'を使用した後)でPython 2.7で正確なコードを実行すると、" uuid module loaded:True "と" var exist on mac True "と表示されます。 LinuxとMacOSの両方で、使用しているPythonのバージョンを教えてください。 – Schnouki
@Schnouki:それはすべてPython 2.6です。 Windows 7、Fedora 11、OSX 10.6.6。 あなたが得ている結果は、私が望まないものです。モジュールをインポートするためには、各プロセスが必要です。 –