Мне нужно несколько экземпляров приложения для работы под управлением контроллера. Вот простой многопроцессорный каркас, который я использую:
bash-4.4$ cat controller.py
import os, sys
from worker import worker
if __name__ == '__main__':
instances = 4
for n in range(instances):
wkr_instance = worker(n)
wkr_instance.connect()
wkr_instance.start()
bash-4.4$ cat worker.py
import os
from multiprocessing import Process
class worker(Process):
def __init__(self, n):
self.name = "worker#" + str(n)
print(self.name)
super().__init__
def connect(self):
print("connected")
def run(self):
print("Running")
while true:
pass
Когда я запустил его, я получил следующие ошибки при первом вызове run ():
bash-4.4$ python3 controller.py
worker#0
connected
Traceback (most recent call last):
File "controller.py", line 10, in <module>
wkr_instance.start()
File "/usr/lib64/python3.6/multiprocessing/process.py", line 99, in start
assert self._popen is None, 'cannot start a process twice'
AttributeError: 'worker' object has no attribute '_popen'
bash-4.4$
Похоже, начало () еще не запускался впервые. Почему он жалуется, что «не может запустить процесс дважды»?