Używam Python 3.1.4, który jest osadzony jako środowisko skryptowe w aplikacji (x64). Do tej pory napotkałem wiele ograniczeń z wbudowanym python. Nie wiem, czy to normalne, czy też programiści aplikacji zablokowali niektóre funkcje.Wbudowany python: wieloprocesor nie działa
Na przykład poniższy kod nie działa:
from multiprocessing import Process
def f(name):
print('hello', name)
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
# --> error in forking.py: 'module' object has no attribute 'argv'
# print(sys.argv) gives the same error
sys.executable
powrotna droga do aplikacji.
Próbowałem to jako WEL:
multiprocessing.forking.set_executable('C:\Python31\python.exe')
multiprocessing.set_executable('C:\Python31\python.exe')
bez powodzenia.
Czy jest możliwe obejście tego problemu? Jest bardzo mało prawdopodobne, że będę miał wpływ, aby twórcy aplikacji zmieniali coś w swoim kodzie.
Dzięki
EDIT
mam go do pracy przez dodanie poniższych informacji:
sys.argv = ['c:/pathToScript/scipt.py']
Potrzebowałem tej linii, a także:
multiprocessing.set_executable('C:/Python31/python.exe')
W przeciwnym razie otwiera się inne wystąpienie aplikacji zamiast uruchamiać kod.
Jedyny problem, jaki mi pozostał, to to, że nie mogę używać metod kontrolujących samą aplikację (takich jak: create_project(), add_report(), ..). Moim głównym celem było umożliwienie wywoływania wielu metod bez konieczności oczekiwania na zakończenie pierwszej. Ale myślę, że to po prostu niemożliwe.
czy jesteś pewien, że nie chcesz używać wątków zamiast wieloprocesorowych? –
Który OS? ...... – NPE
@ Ionut Hulub: Mam również problemy z wątkami, coś z GILem, jak sądzę. Dlatego próbowałem przy wieloprocesowym przetwarzaniu @ NPE: Windows 7, 64-bitowy –