모듈은 가져 오기 전에 새 프로세스 안에 존재하며 osx에서 python-multiprocessing을 사용합니다. 윈도우/리눅스에
다중 프로세서 가져 오기 모듈
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 가져 오기 전에로드되지 않습니다
이
importing module main pid 4352 setting var importing module uuid module loaded: False process pid 4988 AttributeError: 'module' object has no attribute 'some_variable'
그러나 OSX에, 스크립트가 한 번만 가져옵니다, UUID는 가져 오기 전에로드 및 uuid.some_variable이 존재 새로운 프로세스에 :
importing module main pid 4399 setting var uuid module loaded: True process pid 4400 var exists on mac True
어떻게 든, 주요 공정의 UUID 모듈을 가져 오지 않고, 하위 프로세스로 가져옵니다.
뭔가가 누락 되었습니까? 버그입니까, 아니면 Mac이 이럴만한 이유가 있습니까?
모듈은 어떻게 서브 프로세스에 들어갔습니까?
아치 리눅스에서 파이썬 2.7로 정확한 코드를 실행하면 ("2to3' 사용 후 파이썬 3.2) 정확한 코드를 실행할 때"uuid 모듈이로드되었습니다 : True "와"var on mac True "가 나타납니다. Linux와 MacOS에서 사용하고있는 파이썬 버전을 알려주시겠습니까? – Schnouki
@Schnouki : 모두 파이썬 2.6입니다. Windows 7, Fedora 11, OSX 10.6.6. 결과는 내가 원하지 않는 결과입니다. 모듈을 가져 오기 위해 각 프로세스가 필요합니다. –