2017-12-01 6 views
0

私は以下のコードをLinux上で実行しています - UbuntuでPython 3.5を仮想環境で使用し、以下のエラーを取得しています。スレッディングやリストの理解のためにはうまく動作しますが、マルチプロセッシングの動作に問題があります。ここでpathos ImportError:__import__が見つかりません

multiprocess.pool.RemoteTraceback: 
 
""" 
 
Traceback (most recent call last): 
 
    File "/usr/local/lib/python3.5/dist-packages/multiprocess/pool.py", line 119, in worker 
 
    result = (True, func(*args, **kwds)) 
 
    File "/usr/local/lib/python3.5/dist-packages/multiprocess/pool.py", line 44, in mapstar 
 
    return list(map(*args)) 
 
    File "/usr/local/lib/python3.5/dist-packages/pathos/helpers/mp_helper.py", line 15, in <lambda> 
 
    func = lambda args: f(*args) 
 
    File "<input>", line 2, in squared 
 
ImportError: __import__ not found 
 
""" 
 
The above exception was the direct cause of the following exception: 
 
Traceback (most recent call last): 
 
    File "<input>", line 2, in <module> 
 
    File "/usr/local/lib/python3.5/dist-packages/pathos/multiprocessing.py", line 137, in map 
 
    return _pool.map(star(f), zip(*args)) # chunksize 
 
    File "/usr/local/lib/python3.5/dist-packages/multiprocess/pool.py", line 260, in map 
 
    return self._map_async(func, iterable, mapstar, chunksize).get() 
 
    File "/usr/local/lib/python3.5/dist-packages/multiprocess/pool.py", line 608, in get 
 
    raise self._value 
 
ImportError: __import__ not found

それがスレッドプールで動作し、リスト内包のため

import pathos 
import numpy as np 
import time 

def squared(x): 
    import time 
    time.sleep(.5) 
    return x ** 2 


x = np.arange(400).reshape(50, 8) 
p = pathos.pools.ProcessPool() 
t = pathos.pools.ThreadPool() 

st = time.time() 
ans = [squared(i) for i in x] 
et = time.time() 
print(et-st) 

st = time.time() 
ans = p.map(squared, x) 
et = time.time() 
print(et-st) 

st = time.time() 
ans = t.uimap(squared, x) 
list(ans) 
et = time.time() 
print(et-st) 

答えて

0

は、私は私のファイルtest.pyを保存するために必要なことが判明し、コードでありますたとえば、という名前の場合、 == 'メイン':関数定義の直後にスラップし、コマンドラインからpython test.pyを実行します。今すぐ完全に動作します。

import pathos 
import numpy as np 
import time 

def squared(x): 
    # import time 
    time.sleep(.5) 
    return x ** 2 


if __name__ == '__main__': 
    x = np.arange(400).reshape(50, 8) 
    p = pathos.pools.ProcessPool() 
    t = pathos.pools.ThreadPool() 

    st = time.time() 
    ans = [squared(i) for i in x] 
    et = time.time() 
    print(et-st) 

    st = time.time() 
    ans = p.map(squared, x) 
    et = time.time() 
    print(et-st) 

    st = time.time() 
    ans = p.imap(squared, x) 
    list(ans) 
    et = time.time() 
    print(et-st) 

    st = time.time() 
    ans = p.uimap(squared, x) 
    list(ans) 
    et = time.time() 
    print(et-st) 

    st = time.time() 
    ans = t.map(squared, x) 
    et = time.time() 
    print(et-st) 

    st = time.time() 
    ans = t.imap(squared, x) 
    list(ans) 
    et = time.time() 
    print(et-st) 

    st = time.time() 
    ans = t.uimap(squared, x) 
    list(ans) 
    et = time.time() 
    print(et-st) 
関連する問題