Python 2.7:不足しているpool.starmapを補う方法は?

フランチェスコディラウロ

この関数を定義しました

def writeonfiles(a,seed):
    random.seed(seed)

    f = open(a, "w+")
    for i in range(0,10):
        j = random.randint(0,10)
        #print j
        f.write(j)
    f.close()

ここで、aはファイルのパスを含む文字列であり、seedは整数シードです。単純なプログラムを並列化して、各コアが指定した使用可能なパスの1つを取り、そのランダムジェネレーターをシードし、そのファイルに乱数を書き込むようにしたいので、たとえば、ベクトルを渡すと

vector = [Test/file1.txt, Test/file2.txt] 

と種子

seeds = (123412, 989898), 

それは最初に利用可能なコアに機能を与えます

writeonfiles(Test/file1.txt, 123412) 

そして2番目のものに異なる引数を持つ同じ関数:

writeonfiles(Test/file2.txt, 989898)

Stackoverflowで同様の質問をたくさん調べましたが、解決策を機能させることはできません。私が試したのは:

def writeonfiles_unpack(args):
    return writeonfiles(*args)
if __name__ == "__main__":
     folder = ["Test/%d.csv" %i for i in range(0,4)]
     seed = [234124, 663123, 12345 ,123833]
     p = multiprocessing.Pool()
     p.map(writeonfiles, (folder,seed))

TypeErrorが発生します:writeonfiles()は正確に2つの引数(1つ指定)を取ります。

私も試しました

if __name__ == "__main__":
    folder = ["Test/%d.csv" %i for i in range(0,4)]
    seed = [234124, 663123, 12345 ,123833]
    p = multiprocessing.Process(target=writeonfiles, args= [folder,seed])
    p.start()

しかし
、シードsuper(Random、self).seed(a)TypeError:unhashable type: 'list'にファイル "/usr/lib/python2.7/random.py"、行120が表示されます。

最後に、contextmanagerを試しました

 @contextmanager
 def poolcontext(*args, **kwargs):
     pool = multiprocessing.Pool(*args, **kwargs)
     yield pool
     pool.terminate()

if __name__ == "__main__":
    folder = ["Test/%d" %i for i in range(0,4)]
    seed = [234124, 663123, 12345 ,123833]
    a = zip(folder, seed)
    with poolcontext(processes = 3) as pool:
    results = pool.map(writeonfiles_unpack,a )

その結果、ファイル "/usr/lib/python2.7/multiprocessing/pool.py"、行572、get raiseself._valueになります。

TypeError: 'モジュール'オブジェクトは呼び出せません

Darkonaut

Python 2.7には、starmapPython3.3以降のpoolメソッドがありません。これを克服するには、ターゲット関数をラッパーで装飾します。ラッパーは、引数タプルを解凍し、ターゲット関数を呼び出します。

import os
from multiprocessing import Pool
import random
from functools import wraps


def unpack(func):
    @wraps(func)
    def wrapper(arg_tuple):
        return func(*arg_tuple)
    return wrapper

@unpack
def write_on_files(a, seed):
    random.seed(seed)
    print("%d opening file %s" % (os.getpid(), a))  # simulate
    for _ in range(10):
        j = random.randint(0, 10)
       print("%d writing %d to file %s" % (os.getpid(), j, a))  # simulate


if __name__ == '__main__':

    folder = ["Test/%d.csv" % i for i in range(0, 4)]
    seed = [234124, 663123, 12345, 123833]

    arguments = zip(folder, seed)

    pool = Pool(4)
    pool.map(write_on_files, iterable=arguments)
    pool.close()
    pool.join()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonでしきい値を使用して補間を行う方法は?

分類Dev

Pythonで不足している行を印刷する方法は?

分類Dev

Python2のインポート| 不足しているライブラリを特定する

分類Dev

不足している列名を入力してください-Python

分類Dev

Pool.starmap()に2つの引数を渡すにはどうすればよいですか?

分類Dev

不足しているデータをPythonで処理する方法

分類Dev

networkx / pythonで2部補グラフを取得するにはどうすればよいですか?

分類Dev

Pythonは不足しているデータを埋めます

分類Dev

Pythonで2番目の補間を行う方法

分類Dev

Pythonで2D曲線を補間する方法

分類Dev

Pythonの辞書に不足しているキーを追加する

分類Dev

不足しているデータをPythonで埋める

分類Dev

Python、Pandas:不足している値のデフォルトを追加

分類Dev

PythonでBeautifulSoupを使用して不足しているサブタグを追加する

分類Dev

Pythonの比率を使用して不足している性別データを埋める方法は?

分類Dev

Pythonで2の補数を操作する

分類Dev

不足している値をPythonリストに追加するにはどうすればよいですか?

分類Dev

2つの列を結合して、不足している値を割り当てる方法

分類Dev

2GB以上を無料で提供しているように見えるのに、Windows 7でメモリが不足していると表示されるのはなぜですか?

分類Dev

Pythonで他の2つの線の間の線を補間する方法

分類Dev

Pythonスクリプトで不足しているモジュールをチェックし、不足している場合はインストールします

分類Dev

Python / Pandas:特定の行と列に不足している値を入力します

分類Dev

Pythonでファイルに不足している行を追加します

分類Dev

Pythonの範囲から不足している整数を確認する

分類Dev

Python配列を不足しているデータに合わせる

分類Dev

不足しているデータをPythonの数値に置き換える

分類Dev

不足しているPythonでスクリーンショットをキャプチャする方法は?

分類Dev

scipyを使用して2次元補間を実行するにはどうすればよいですか?

分類Dev

ラムの2%が不足しているのはなぜですか

Related 関連記事

  1. 1

    Pythonでしきい値を使用して補間を行う方法は?

  2. 2

    Pythonで不足している行を印刷する方法は?

  3. 3

    Python2のインポート| 不足しているライブラリを特定する

  4. 4

    不足している列名を入力してください-Python

  5. 5

    Pool.starmap()に2つの引数を渡すにはどうすればよいですか?

  6. 6

    不足しているデータをPythonで処理する方法

  7. 7

    networkx / pythonで2部補グラフを取得するにはどうすればよいですか?

  8. 8

    Pythonは不足しているデータを埋めます

  9. 9

    Pythonで2番目の補間を行う方法

  10. 10

    Pythonで2D曲線を補間する方法

  11. 11

    Pythonの辞書に不足しているキーを追加する

  12. 12

    不足しているデータをPythonで埋める

  13. 13

    Python、Pandas:不足している値のデフォルトを追加

  14. 14

    PythonでBeautifulSoupを使用して不足しているサブタグを追加する

  15. 15

    Pythonの比率を使用して不足している性別データを埋める方法は?

  16. 16

    Pythonで2の補数を操作する

  17. 17

    不足している値をPythonリストに追加するにはどうすればよいですか?

  18. 18

    2つの列を結合して、不足している値を割り当てる方法

  19. 19

    2GB以上を無料で提供しているように見えるのに、Windows 7でメモリが不足していると表示されるのはなぜですか?

  20. 20

    Pythonで他の2つの線の間の線を補間する方法

  21. 21

    Pythonスクリプトで不足しているモジュールをチェックし、不足している場合はインストールします

  22. 22

    Python / Pandas:特定の行と列に不足している値を入力します

  23. 23

    Pythonでファイルに不足している行を追加します

  24. 24

    Pythonの範囲から不足している整数を確認する

  25. 25

    Python配列を不足しているデータに合わせる

  26. 26

    不足しているデータをPythonの数値に置き換える

  27. 27

    不足しているPythonでスクリーンショットをキャプチャする方法は?

  28. 28

    scipyを使用して2次元補間を実行するにはどうすればよいですか?

  29. 29

    ラムの2%が不足しているのはなぜですか

ホットタグ

アーカイブ