0

私はいくつかの独立したスレッドを持っていますが、それらを Process に入れることができれば、ある程度の速度が得られるでしょう。

クラス x(Thread): with a def run(self): をクラス x(Process) に変更しました...しかし、プロセスは run() を呼び出していないようです。

プロセスを設定するための正しい構文は何ですか?

def __init()__:
    Process.__init()__(self, Target=self.run, args=(self,)): ???
4

1 に答える 1

2

where is the variable instance.start()that instanceyou set to a instance of your class x.

もう少し(コード)コンテキストを提供すると、答えやすくなります。私が見たところ、新しいスレッドまたはプロセスをセットアップして開始する2つの異なる方法を混同しています。これは必ずしも悪いことではなく、意図的なものかもしれません。しかし、そうでない場合は、必要以上に入力しています。

1 つの方法は次のとおりです。

p = Process(target=f, args=('bob',))
p.start()
p.join()

fどんな関数であっても。最初の行は新しいProcessインスタンスを設定し、2 行目は fork して (サブ) プロセスを開始し、p.join()それが終了するのを待ちます。これはドキュメントの正確な例です

2 番目の使用例では、 からサブクラス化し、通常はコンストラクターを呼び出すときにclass Processa を指定しません。実際にメソッドを呼び出すときにフォークとして呼び出されるデフォルトのメソッドです。targetrunprocess.start()

class MySubProcess(multiprocessing.Process):
    def __init__(self, *args, **kwargs):
        super().__init__(self)
        # some more specific setup for your class using args/kwargs
    def run(self):
        # here's the code that is going to be run as a forked process
        pass

次に、で実行します

p = MySubProcess(any_args_here)
p.start()
p.join()

引数が必要ない場合は__init__、サブクラスのコンストラクターを定義する必要はありません。

どちらのアプローチでも、threading.Thread と multiprocessing.Process のデータ型を、コードをほとんど変更せずに切り替えることができます。もちろん、データ共有の仕組みは変わりますし、通信もスレッドやプロセスごとに異なります。

于 2013-02-22T13:19:55.203 に答える