where is the variable instance.start()
that instance
you 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 Process
a を指定しません。実際にメソッドを呼び出すときにフォークとして呼び出されるデフォルトのメソッドです。target
run
process.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 のデータ型を、コードをほとんど変更せずに切り替えることができます。もちろん、データ共有の仕組みは変わりますし、通信もスレッドやプロセスごとに異なります。