Как прекратить выполнение процессов, использующих библиотеку multiprocessing?

  • 8 сентября 2023 г. 13:06
Ответы на вопрос 2
Вам понадобится использовать метод `terminate()` для остановки процессов, использующих библиотеку multiprocessing. 

Вот пример кода, который демонстрирует, как остановить выполнение дополнительных процессов:

```python
from multiprocessing import Process, Value

def function1(result):
    # Ваш код для функции 1
    result.value = 42

def function2(result):
    # Ваш код для функции 2
    result.value = 66

if __name__ == '__main__':
    result = Value('i', 0)
    p1 = Process(target=function1, args=(result,))
    p2 = Process(target=function2, args=(result,))
    
    p1.start()
    p2.start()

    p1.join() # Ожидание завершения процесса 1
    p2.join() # Ожидание завершения процесса 2
    
    # Получение результатов из дополнительных процессов
    print("Результат функции 1:", result.value)

    # Остановка дополнительных процессов
    p1.terminate()
    p2.terminate()
```

В этом примере мы создаем два дополнительных процесса `p1` и `p2`, которые выполняют две разные функции `function1` и `function2` соответственно. Мы используем `Value` для передачи результата из дополнительных процессов обратно в основной процесс.

Метод `join()` используется для ожидания завершения дополнительных процессов. После завершения этих процессов, результаты передаются обратно в основной процесс.

Наконец, мы используем метод `terminate()` для остановки дополнительных процессов после получения результатов.

Обратите внимание, что использование метода `terminate()` может привести к незаконченным операциям или утечке ресурсов. Поэтому рекомендуется использовать его только в случае крайней необходимости и внимательно продумывать логику остановки процессов.
Посмотрите примеры использования модуля multiprocessing в документации Python: https://docs.python.org/3/library/multiprocessing

Ваша функция count_vis() должна быть передана в качестве таргета, а не её результат выполнения. То есть, передайте count_vis (без скобок) как аргумент target. Следующим аргументом args должны быть входные параметры вашей функции.

Вот пример из документации, посмотрите на отличия от вашего кода:

```
from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()
```
Похожие вопросы