3

私はマルチプロセッシングが初めてで、プロジェクトの threading.Thread クラスの代わりに multiprocessing.Process クラスを使用しようとしていますが、これらは明らかに同じ変数を持っているためですが、このコードをコピーしたにもかかわらず、run() はうまくいきます...これはpythonのバージョンまたは不足しているファイルと関係があるのでしょうか?

import multiprocessing

class Worker(multiprocessing.Process):
    def run(self):
        print 'In %s' % self.name
        return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = Worker()
        jobs.append(p)
        p.start()
    for j in jobs:
        j.join()

他の例を見つけましたが、まだこれを理解していません。助けてください。

4

2 に答える 2

1

コードには 2 つの問題があります。

  1. Process.__init__Worker クラスから呼び出す必要があります。__init__現在、派生クラスに関数がありません。これを行うまで、何も正しく動作しません。

  2. run()実行するコードを伝達するための推奨される方法は、直接オーバーライドするのではなく、target=引数をに使用することProcessです。これによりProcess、新しいプロセスでコードに引数を渡すことができます。詳細については、ドキュメントを参照してmultiprocessing.Processください。

于 2013-07-23T01:52:24.287 に答える
1

これは、マルチプロセッシング モジュールとスレッド モジュールの違いによるものです。この質問は、基本的にはChild processes created with python multiprocessing module won't print と同じです。

于 2012-12-09T02:06:51.597 に答える