Многопроцессорный пул перестает работать — Windows 11Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Многопроцессорный пул перестает работать — Windows 11

Сообщение Anonymous »

Следующий код запускает 5 задач многопроцессорной обработки. Эти задачи печатают сообщение, затем переходят в режим сна на случайный период времени, а затем повторяют это снова. Это повторяется 10 раз, поэтому весь набор задач должен завершиться максимум за 50 секунд.
При первом создании пула выводятся адреса 5 объектов пула.
При первом создании пула распечатываются адреса 5 объектов пула.
p>
Этот код работает нормально, но он был завершен до завершения всей своей работы. При повторном запуске вы увидите, что 5 объектам пула назначены новые адреса.
После этого процесса остановки операции до ее завершения (прерывание клавиатуры) несколько раз код перестает работать. Задачи никогда не создаются, и код выполняется до конца. И распределение объектов пула показывает, что они распределяют одни и те же объекты снова и снова, тогда как до назначения новых адресов объектов.
Таким образом, получается, что ресурсы ОС выделяются и никогда не освобождаются. И когда все эти ресурсы израсходованы, код перестает работать. Но даже когда командная строка, под которой он запущен, завершается (его окно закрывается), эти ресурсы не возвращаются. А когда открывается новая командная строка и приложение запускается снова, вы можете видеть, что назначаются те же идентификаторы объектов, задачи никогда не запускаются, а код падает. Обычно код останавливается в пуле.join(), ожидая завершения рабочих (задачи).
Похоже, не существует способа заставить ОС освободить эти ресурсы пула. Единственный способ — перезагрузить ОС.
Во время отладки кода маловероятно, что когда-нибудь он запустится до завершения и появятся функции Pool.close() и poll.join. () выполнено. ТАК, после нескольких выполнений тестируемого кода больше не выделяются задачи.
Таким образом, возникает вопрос: как мы можем гарантировать, что порожденные задачи будут завершены, а их ресурсы вернутся в пул?
import multiprocessing
import time
import random

# Simultaneous tasks running
def task(id):
for i in range(10):
stime = random.randint(1,5)
print(f"Task {id}: Woke up. Now sleep {stime}")
time.sleep(stime)
exit(0)

if __name__ == "__main__":
print ('create pool of tasks')
pool = multiprocessing.Pool(processes=5)
print (pool)

# Start 5 asynchronous tasks
for i in range(1,6):
result = pool.apply_async(task, i)
print (result)

pool.close()

# Wait for all tasks to complete
pool.join()
print ('end program')


Подробнее здесь: https://stackoverflow.com/questions/790 ... windows-11
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Многопроцессорный пул перестает работать — Windows 11
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Многопроцессорный пул перестает работать — Windows 11
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Многопроцессорный пул перестает работать — Windows 11
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Многопроцессорный пул перестает работать — Windows 11
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Многопроцессорный пул Python с объектами классов
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»