2016-08-05 27 views
3

Ich schreibe etwas Python-Code mit Multiprocessing & Pathos. Ich habe ein kleines Testprogramm geschrieben, um mich daran zu gewöhnen, die Multiprocessing zu verwenden, die auf meinem lokalen Rechner läuft, aber nicht auf einem anderen Cluster läuft.Python Multiprocessing & Pathos: Importfehler

Ich erhalte die folgende Fehlermeldung:

Traceback (most recent call last): 
    File "./multi.py", line 116, in <module> 
    pool = pathos_multiprocessing.Pool(processes=pool_size,maxtasksperchild=1,) 
    File "/usr/local/lib/python3.4/dist-packages/multiprocess/pool.py", line 150, in __init__ 
    self._setup_queues() 
    File "/usr/local/lib/python3.4/dist-packages/multiprocess/pool.py", line 243, in _setup_queues 
    self._inqueue = self._ctx.SimpleQueue() 
    File "/usr/local/lib/python3.4/dist-packages/multiprocess/context.py", line 110, in SimpleQueue 
    from .queues import SimpleQueue 
    File "/usr/local/lib/python3.4/dist-packages/multiprocess/queues.py", line 22, in <module> 
    import _multiprocess as _multiprocessing 
ImportError: No module named '_multiprocess' 

aber wenn ich ein tun

pip3 list 

beide Pathos und Multiprocessing-Module sind eindeutig da:

multiprocess (0.70.4) 
nbconvert (4.2.0) 
nbformat (4.0.1) 
nose (1.3.1) 
notebook (4.2.0) 
numpy (1.10.4) 
oauthlib (0.6.1) 
pathos (0.2.0) 

Irgendwelche guten Ideen, warum Dies könnte passieren, wäre willkommen!

Der kleine Testcode ist:

#! /usr/bin/env python3 

import pathos.multiprocessing as mp 
import os 
import random 

class Pool_set: 
    def pool_fun(directory_name): 
     cwd=os.getcwd() 
     os.mkdir(str(directory_name)) 
     directory=os.path.join(cwd,str(directory_name)) 
     os.chdir(directory) 
     os.system('{}'.format('sleep '+str(directory_name))) 
     cwd2=os.getcwd() 
     print(cwd2) 
     test_file = open('test_file.out','w') 
     test_file.write(cwd2) 
     print("Finished in "+directory) 
     os.chdir(cwd) 

if __name__ == '__main__': 


    config=[] 
    pool_set = Pool_set 
    for i in (random.sample(range(1,100),3)): 
     config.append(i) 

    pool_size = mp.cpu_count() 
    pool = mp.Pool(processes=pool_size,maxtasksperchild=1,) 

    pool_outputs = pool.map(pool_set.pool_fun,config) 
    pool.close() 
    pool.join() 
+0

Ich kann Ihr Programm ohne Probleme ausführen. Können Sie den eingegebenen Befehl und den vollständigen Stack-Trace anzeigen? – laike9m

+0

Hey laike9m, vollständige Traceback enthalten. Das Skript ist ausführbar und ich führe es einfach als ./multi.py aus. Danke – abinitio

+0

Ich kann nicht warum denken. Hast du versucht, 'python3 multi.py' auszuführen? – laike9m

Antwort

0

ich die pathos und multiprocess Autor bin. Ich denke, es gibt zwei mögliche Gründe, warum Sie _multiprocess nicht finden können. Der erste und bei weitem häufigste Grund ist, dass Sie keinen C++ - Compiler haben. multiprocessing benötigt einen C++ - Compiler, und wenn Sie unter Windows sind, müssen Sie einen installieren. Siehe: https://wiki.python.org/moin/WindowsCompilers. Die zweite ist, dass es nicht gefunden werden konnte aufgrund einer PATH/PYTHONPATH Problem mit, wie es installiert wurde, wenn Sie mit prefix etc durcheinander bringen, aber das ist der weit überwiegende Fall.