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 のデータ型を、コードをほとんど変更せずに切り替えることができます。もちろん、データ共有の仕組みは変わりますし、通信もスレッドやプロセスごとに異なります。