필자는 원래 Windows 용으로 포팅하려는 Python 프로그램을 Linux 용으로 작성했습니다. 모든 의존성을 포함하는 가상 환경에서 프로그램을 실행 중입니다. (필자 프로그램은 pip 설치로 휠로 설치됩니다. --find-links wheels my_module). 이 프로그램은 제공되는 인수로 해석대로 base_module 내 모듈을로드Python, Windows 및 Multiprocessing
(venv) C:\>venv\Scripts\python.exe -m base_module.Launcher arg1 arg2
으로 시작하고, 그의 관련 코드입니다 : 이것은 리눅스에서 잘 근무하고있다
from multiprocessing.managers import SyncManager
import OtherCustomClass
class BaseModule(object):
def __init__(self, arg1, arg2):
self.manager = SyncManager()
self.manager.start(ignore_interrupt)
def main(argv=None):
ret = -1
try:
basmod = BaseModule(argv[0], argv[1])
ret = basmod.run()
except Exception, err:
print("error: " + str(err))
print(traceback.format_exc())
return ret
if __name__ == "__main__":
exitCode = main(sys.argv[1:])
sys.exit(exitCode)
하지만 Windows에서 내가 얻을 다음과 같은 예외 : 후자는 EOFError가 참 오류가 OtherC 가져올 수 없습니다되고있는 SyncManager에있는 포크 (fork)에서 예기치 않은 조기 종료로 인해 발생
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\Lib\multiprocessing\forking.py", line 380, in main
prepare(preparation_data)
File "C:\Python27\Lib\multiprocessing\forking.py", line 505, in prepare
'__parents_main__', file, path_name, etc
File "build/bdist.linux-x86_64/egg/base_module/BaseModule.py", line 2, in <module>
ImportError: No module named OtherCustomClass
exception in main:
Traceback (most recent call last):
File "build/bdist.linux-x86_64/egg/base_module/BaseModule.py", line 12, in main
File "build/bdist.linux-x86_64/egg/base_module/BaseModule.py", line 7, in __init__
File "C:\Python27\Lib\multiprocessing\managers.py", line 528, in start
self._address = reader.recv()
EOFError
ustomClass. OtherCustomClass가 venv/lib/site-packages 내의 base_module의 폴더에 있음을 확인했습니다.이 오류는 Python이 main() 또는 의 지침에 결코 도달하지 않기 때문에 모듈을 시작할 때 발생하지 않습니다. 스크립트 컴파일되지 않을 것이다.
저는 약간의 연구를했는데,이 문제는 다른 사람들 (솔루션을 게시하지 않고 문제를 해결 한 제 3 자 라이브러리를 사용하는 경우가 많음)을 때렸다는 것을 알고 있습니다. Windows에서 fork()가없고 Windows에서 파이썬이 멀티 프로세싱을 처리하는 것을 추적하는 것 같습니다. http://docs.python.org/library/multiprocessing.html#windows도 참조하십시오. 하지만이 문제를 해결하는 방법은별로 없습니다.
이것은 Windows 7 x64에서 실행되는 최신 Python 2.7 브랜치 (2.7.8)입니다.
이 있습니까 당신이 당신의 코드에서 들여 쓰기 실수가 파이썬 3.4상의 명시 적으로 상대 가져 오기 작업을 수행하는 것이 또한 노트의
, 견본? 'main'은'BaseModule'의 인스턴스 메서드로 사용하는 방식으로 전혀 작동하지 않습니다. –
아, 네. 여기에 관련성이있는 부분을 캡처하기 위해 많은 코드를 다듬 었습니다. 즉, 감독이었습니다 – user2093082
@ user2093082 최소한의 예를 들어이 코드가 재현 되나요? virtualenv 외부에서 실행하면 재현됩니까? – dano